Page Sub Menu
Page Sub-Menu
The page menu (#page-menu) is a secondary navigation bar, typically placed just below the main header. It is ideal for product pages, long articles, or landing pages where you want in-page section links plus a call-to-action. It supports its own sticky behaviour and, on one-page sites, smooth scrolling.
Basic Markup
<div id="page-menu">
<div id="page-menu-wrap" class="not-dark">
<div class="container">
<div class="page-menu-row py-3">
<div class="page-menu-title fw-medium me-5">iPhone 13</div>
<nav class="page-menu-nav">
<ul class="page-menu-container">
<li class="page-menu-item current"><a href="#"><div>Overview</div></a></li>
<li class="page-menu-item"><a href="#"><div>Features</div></a></li>
<li class="page-menu-item"><a href="#"><div>Gallery</div></a></li>
<li class="page-menu-item"><a href="#"><div>Compare</div></a></li>
</ul>
</nav>
<div class="ms-auto me-2 me-lg-0 hstack">
<a href="#" class="button rounded-pill m-0">Buy Now</a>
</div>
<div id="page-menu-trigger"><i class="bi-list"></i></div>
</div>
</div>
</div>
</div><!-- #page-menu end -->Page Menu Classes
| Class / ID | Purpose |
|---|---|
#page-menu |
The page menu wrapper. |
#page-menu-wrap |
Inner wrapper (add not-dark for a light bar). |
page-menu-row |
Flex row holding the title, nav, and CTA. |
page-menu-title |
The label shown on the left. |
page-menu-nav |
The <nav> around the link list. |
page-menu-container |
The <ul> list of items. |
page-menu-item |
A single link item. Add current for the active one. |
#page-menu-trigger |
The mobile toggle for the page menu. |
One-Page Smooth Scroll
On one-page layouts, add one-page-menu to the container and point each link's data-href at a section. Configure easing, speed, and offset with data attributes:
<nav class="page-menu-nav">
<ul class="page-menu-container one-page-menu" data-easing="easeInOutExpo" data-speed="1250" data-offset="0">
<li class="page-menu-item"><a href="#" data-href="#wrapper"><div>Start</div></a></li>
<li class="page-menu-item"><a href="#" data-href="#section-about"><div>About</div></a></li>
<li class="page-menu-item"><a href="#" data-href="#section-works"><div>Work</div></a></li>
<li class="page-menu-item"><a href="#" data-href="#section-contact"><div>Contact</div></a></li>
</ul>
</nav>Page Menu Data Attributes
| Attribute | Example | Purpose |
|---|---|---|
data-easing |
easeInOutExpo |
Scroll easing function. |
data-speed |
1250 |
Scroll animation duration (ms). |
data-offset |
65 |
Pixels of offset from the top when scrolling to a section (accounts for a sticky header). |
data-active-class |
active / current |
Class applied to the active item as you scroll. |
data-mobile-sticky |
true |
Keeps the page menu sticky on mobile. |
data-sticky-shrink |
true / false |
Controls shrink of the page menu when sticky. |
data-pagemenu-breakpoint |
number | Breakpoint at which the page menu collapses to its trigger. |
Non-Sticky Page Menu
<div id="page-menu" class="no-sticky"> ... </div>Notes and Tips
- Each link label is wrapped in a
<div>inside the<a>, matching the primary menu pattern. - The CTA area uses the Canvas
.buttonshortcode (for examplebutton rounded-pill m-0), not a Bootstrap.btn. - Use
data-offsetequal to your header height so scrolled sections are not hidden under the sticky header. - Add
not-darkto#page-menu-wrapto keep a light bar even when the surrounding page is dark.
Usage
<!-- Page Sub Menu
============================================= -->
<div id="page-menu" data-mobile-sticky="true">
<div id="page-menu-wrap">
<div class="container">
<div class="page-menu-row">
<div class="page-menu-title">Explore <span>CANVAS</span></div>
<nav class="page-menu-nav">
<ul class="page-menu-container">
<li class="page-menu-item current"><a href="#"><div>Gallery</div></a></li>
<li class="page-menu-item"><a href="#"><div>Features</div></a></li>
<li class="page-menu-item"><a href="#"><div>Models</div></a></li>
<li class="page-menu-item"><a href="#"><div>Reviews</div></a>
<ul class="page-menu-sub-menu">
<li class="page-menu-item"><a href="#"><div>Expert Reviews</div></a></li>
<li class="page-menu-item"><a href="#"><div>User Reviews</div></a></li>
</ul>
</li>
<li class="page-menu-item"><a href="#"><div>Compare</div></a></li>
<li class="page-menu-item"><a href="#"><div>Build</div></a></li>
<li class="page-menu-item"><a href="#"><div>Order</div></a></li>
</ul>
</nav>
<div id="page-menu-trigger"><i class="icon-reorder"></i></div>
</div>
</div>
</div>
</div><!-- #page-menu end -->Note: It is recommended that you place the Page Sub Menu code just below the Header.
Extras
The one-page dot/link menu (#page-menu) collapses below pageMenuBreakpoint (default 992). Override it per page with data-pagemenu-breakpoint on <body>.
<body class="stretched" data-pagemenu-breakpoint="768">Globally, set it in cnvsOptions:
<script>
var cnvsOptions = { pageMenuBreakpoint: 768 };
</script>At or above the breakpoint Canvas adds is-expanded-pagemenu to <body>. If a page menu exists but no page-menu breakpoint is set, Canvas falls back to the main menuBreakpoint value.
