Every visible region of a MokoCassiopeia page is controlled by a named module position. This reference shows exactly where each position renders on desktop and mobile — so you always know which position to assign a module to.
Auto-grid positions (top-a, top-b, bottom-a, bottom-b) divide the 12-column Bootstrap grid equally among however many modules are placed — up to 6. With 6 modules each gets col-md-2; with fewer they stretch wider. All four positions work identically.
Desktop Layout
Full-width view (≥768px). Positions are colour-coded by zone.
topbar Top bar — social links, login state, utility navbelow-topbar Below top bar — alerts, promo bars, announcementsbelow-logo Below branding — header images, taglinesmenu Navigation bar — mod_menu and custom nav modules (9 cols)search
banner Hero / full-width banner — primary CTAs, intro messagingtop-a full width — up to 6 modules Own full-width row above content.123456top-b full width — up to 6 modules Second full-width row above content.123456sidebar-leftmain-topmain-bottomsidebar-rightbottom-a full width — up to 6 modules First full-width footer row.123456bottom-b full width — up to 6 modules Second full-width footer row.123456footer Copyright, legal links, utility footerdrawer-left and drawer-right slide in as panels triggered by a toggle button. Not shown in either diagram.Mobile Layout
Narrow view (<768px). All Bootstrap columns stack to full width. Sidebars reorder: sidebar-left appears above content, sidebar-right appears below. Auto-grid modules stack vertically one per row.
topbarbelow-topbarbelow-logomenu (hamburger)search (stacks below)bannertop-a modules stack 1 per rowtop-b modules stack 1 per rowsidebar-left ↑ moves above contentmain-topmain-bottomsidebar-right ↓ moves below contentbottom-a modules stack 1 per rowbottom-b modules stack 1 per rowfooterMobile behaviour summary
| Position | Mobile behaviour |
|---|---|
topbar |
Full width, unchanged |
below-logo |
Full width, unchanged |
below-topbar |
Full width, unchanged |
menu |
Collapses to hamburger icon; search stacks below it |
search |
Stacks below menu (no longer shares the row) |
banner |
Full width, unchanged |
top-a |
Each module becomes full width, stacked vertically |
top-b |
Each module becomes full width, stacked vertically |
sidebar-left |
Moves above the Component Content |
main-top |
Full width, unchanged |
main-bottom |
Full width, unchanged |
sidebar-right |
Moves below the Component Content |
bottom-a |
Each module becomes full width, stacked vertically |
bottom-b |
Each module becomes full width, stacked vertically |
footer |
Full width, unchanged |
drawer-left/right |
Especially useful on mobile — triggered by toggle buttons in nav |
md breakpoint). The auto-grid positions switch from equal-width columns to stacked full-width blocks at this point. To test, resize your browser or use DevTools device simulation.Auto-Grid Positions & Bootstrap Grid
The four positions top-a, top-b, bottom-a, and bottom-b each render as a Bootstrap row. The template divides the 12 Bootstrap columns equally among however many modules are placed in the position. With 6 modules each gets col-md-2 — the narrowest and widest the grid supports for 6 equal items. With fewer modules they stretch proportionally wider, filling the full 12 columns.
The rendered HTML structure looks like this:
<div class="row"> <!-- position: top-a -->
<div class="col-md-12">...</div> <!-- 1 module = col-md-12 -->
<div class="col-md-6">...</div> <!-- 2 modules = col-md-6 each -->
<div class="col-md-6">...</div>
<div class="col-md-2">...</div> <!-- 6 modules = col-md-2 each (row full) -->
<div class="col-md-2">...</div>
<div class="col-md-2">...</div>
<div class="col-md-2">...</div>
<div class="col-md-2">...</div>
<div class="col-md-2">...</div>
<div class="col-md-2">...</div> <!-- 7th module wraps to new row -->
</div>
| Modules in position | Bootstrap class | Desktop width each | Columns used | Mobile |
|---|---|---|---|---|
| 1 | col-md-12 |
100% | 12 / 12 | Full width |
| 2 | col-md-6 |
50% | 12 / 12 | Full width stacked |
| 3 | col-md-4 |
33.3% | 12 / 12 | Full width stacked |
| 4 | col-md-3 |
25% | 12 / 12 | Full width stacked |
| 5 | col-md-2 |
16.6% | 10 / 12 (2 cols unused) | Full width stacked |
| 6 | col-md-2 |
16.6% | 12 / 12 — row full | Full width stacked |
| 7+ | col-md-2 |
16.6% | wraps — new row starts | Full width stacked |
Each position is independent.
top-a and top-b are separate full-width rows stacked vertically — not two halves of a shared row. Six modules in top-a and six in top-b gives you two full 6-column rows, one above the other. Same applies to bottom-a and bottom-b.
Position Reference
| Position | Zone | Desktop | Mobile | Typical use | Notes |
|---|---|---|---|---|---|
search |
Nav bar | 3 cols (~17%) | Full width, stacks below menu | Search box, smart search input | Fixed right end of nav bar on desktop |
menu |
Nav bar | 10 cols (~83%) | Hamburger icon | Main navigation — mod_menu, mega menu | Collapses to hamburger on mobile; search stacks below it |
topbar |
Header | Full | Full | Social icons, login state, utility nav | Very top of every page |
below-logo |
Header | Full | Full | Header images, taglines, rotating banners | Below the branding/logo area, above the nav bar |
below-topbar |
Header | Full | Full | Alert bars, promo notices, announcements | Below the top bar, above the logo/branding area |
banner |
Hero | Full | Full | Full-width hero images, CTAs, intro blocks | Supports mokocassiopeia:hero layout. Use moduleclass_sfx to vary per page. |
top-a auto-grid |
Top | Full (1–6 cols) | Each mod full-width stacked | Intro content, stats, highlight cards above the article | Full-width row. Up to 6 modules auto-arrange. 7th wraps to new row. |
top-b auto-grid |
Top | Full (1–6 cols) | Each mod full-width stacked | Second row above content — complementary to top-a | Full-width row below top-a. Independent auto-grid. |
sidebar-left |
Content | ~17% | Full width, above content | Secondary nav, category lists, tag clouds | Only renders when a module is assigned. Expands to fill when empty. |
main-top |
Content | Inner full | Full | Content-area alerts, page-specific intros | Inside the main column, above the article. |
main-bottom |
Content | Inner full | Full | Related articles, comments, pagination | Inside the main column, below the article. |
sidebar-right |
Content | ~17% | Full width, below content | Related links, newsletter, promo widgets | Only renders when a module is assigned. Expands to fill when empty. |
bottom-a auto-grid |
Footer | Full (1–6 cols) | Each mod full-width stacked | First footer row — contact info, about blurb, quick links | Full-width row. Up to 6 modules auto-arrange. 7th wraps to new row. |
bottom-b auto-grid |
Footer | Full (1–6 cols) | Each mod full-width stacked | Second footer row — social links, newsletter, secondary links | Full-width row below bottom-a. Independent auto-grid. |
footer |
Footer | Full | Full | Copyright, legal links, back-to-top | Very bottom of every page. |
drawer-left |
Off-canvas | Panel | Panel | Mobile nav, quick links, login form | Slides in from left. Especially useful on mobile. |
drawer-right |
Off-canvas | Panel | Panel | Cart sidebar, notifications, help panel | Slides in from right. |
brand-aside |
Header | Partial | Full | Content beside the logo/brand in the header | Appears in the branding row alongside the site logo. |
debug |
System | Full | Full | Joomla debug output — queries, profile, language strings | Only visible when Site Debug is enabled. |
Assigning Modules to Positions
- Go to Admin → Content → Site Modules.
- Open the module you want to place.
- Set the Position field to the position name (e.g.
top-a). - On the Menu Assignment tab, choose which pages the module appears on.
- Save & Close, then clear cache.
?tp=1 to any front-end URL to see position outlines. Disable before going live.Page-Specific Module Assignment
- On all pages — module appears site-wide
- Only on the pages selected — tick individual menu items
- On all pages except those selected — exclude specific pages
For banner this lets you show a unique hero per page without duplicating modules. For top-a / top-b it allows section-specific intro rows that appear only on relevant category pages.