Responsive Widget¶
Description¶
The Responsive Widget allows showing/hiding content based on screen size. In Page Builder Edit Mode, content always displays for easy editing.
Page Builder Name: Responsive | PapaThemes
Version: 1.0.0
Features¶
- ✅ Show/hide by breakpoints
- ✅ Edit mode visibility
- ✅ Lightweight (no jQuery)
- ✅ CSS-based responsive
- ✅ Page Builder integration
How to Use¶
1. Add Widget¶
- Open Page Builder
- Drag Responsive | PapaThemes widget to the page
- Add content inside
2. Configuration¶
| Option | Description |
|---|---|
| Show on Desktop | Show on desktop (>800px) |
| Show on Tablet | Show on tablet (551-800px) |
| Show on Mobile | Show on mobile (<550px) |
How It Works¶
CSS Classes¶
Edit Mode Class¶
function show() {
document.querySelectorAll('.PapathemesWidgetResponsive')
.forEach(el => el.classList.add('_editMode'));
}
function hide() {
document.querySelectorAll('.PapathemesWidgetResponsive')
.forEach(el => el.classList.remove('_editMode'));
}
Page Builder Integration¶
function onMessage(event) {
let data = JSON.parse(event.data);
if (data.action === 'toggle-edit-mode' &&
data.initiator === 'PAGE_BUILDER') {
if (data.editMode) {
show();
} else {
hide();
}
}
}
window.addEventListener('message', onMessage);
Responsive CSS¶
Desktop Only¶
.PapathemesWidgetResponsive._desktop-only {
display: block;
}
@media (max-width: 800px) {
.PapathemesWidgetResponsive._desktop-only {
display: none;
}
}
/* Always show in edit mode */
.PapathemesWidgetResponsive._desktop-only._editMode {
display: block !important;
}
Mobile Only¶
.PapathemesWidgetResponsive._mobile-only {
display: none;
}
@media (max-width: 550px) {
.PapathemesWidgetResponsive._mobile-only {
display: block;
}
}
Tablet Only¶
.PapathemesWidgetResponsive._tablet-only {
display: none;
}
@media (min-width: 551px) and (max-width: 800px) {
.PapathemesWidgetResponsive._tablet-only {
display: block;
}
}
Edit Mode Behavior¶
In Page Builder¶
- All content visible
_editModeclass added- Can edit all breakpoints
In Preview/Live¶
- Content shows/hides per configuration
_editModeclass removed- Responsive rules apply
Initialization¶
window.PapathemesWidgetResponsiveInit = () => {
if (window.BigCommerce && window.BigCommerce.inlineEditor) {
show(); // In Page Builder
} else {
hide(); // Preview/Live
}
// Prevent duplicate initialization
if (window.PapathemesWidgetResponsive__onMessageInitialized) {
return;
}
window.PapathemesWidgetResponsive__onMessageInitialized = true;
window.addEventListener('message', onMessage);
};
Use Cases¶
Different Content per Device¶
Mobile-Specific Elements¶
Desktop-Specific Elements¶
Usage Examples¶
Desktop Banner, Mobile Image¶
<!-- Desktop version -->
<div class="PapathemesWidgetResponsive _desktop-only">
<video src="hero-video.mp4" autoplay muted loop></video>
</div>
<!-- Mobile version -->
<div class="PapathemesWidgetResponsive _mobile-only">
<img src="hero-mobile.jpg" alt="">
</div>
Different Navigation¶
<!-- Desktop nav -->
<div class="PapathemesWidgetResponsive _desktop-only">
<!-- Full mega menu -->
</div>
<!-- Mobile nav -->
<div class="PapathemesWidgetResponsive _mobile-only">
<!-- Hamburger menu -->
</div>
Breakpoints¶
| Name | Range | Use Case |
|---|---|---|
| Desktop | > 800px | Full experience |
| Tablet | 551px - 800px | Touch-friendly |
| Mobile | < 550px | Mobile-first |
Performance¶
Benefits¶
- CSS-based hiding (fast)
- No layout shift
- Minimal JavaScript
Considerations¶
- Hidden elements still load
- Use for layout, not large media
- Consider lazy loading
Best Practices¶
DO¶
- Use for layout variations
- Keep content synchronized
- Test all breakpoints
- Use CSS media queries when possible
DON'T¶
- Hide large videos/images (still download)
- Duplicate critical content
- Forget to test mobile
- Over-complicate layouts
Notes¶
- Edit mode: Content always visible when editing
- Download: Hidden content still downloads
- SEO: Hidden content still indexed
- Testing: Test on real devices
- CSS preference: Prefer CSS media queries when possible
- Duplicate init: Widget automatically prevents duplicate