Skip to content

Sidenav

A responsive side navigation component that provides a collapsible menu with support for icons, titles, dropdown submenus, and various visual states. The sidenav automatically adapts between compact and expanded modes based on screen size and user interaction.

This component has no external dependencies beyond Metro UI core functionality.

<ul data-role="sidenav">
<li class="title">Navigation</li>
<li class="active"><a href="#"><span class="mif-home icon"></span><span class="caption">Dashboard</span></a></li>
<li><a href="#"><span class="mif-cog icon"></span><span class="caption">Settings</span></a></li>
<li><a href="#"><span class="caption">Profile</span></a></li>
</ul>
<ul data-role="sidenav" data-expand-point="lg">
<li class="title">Menu</li>
<li><a href="#"><span class="mif-home icon"></span><span class="caption">Home</span></a></li>
<li><a href="#"><span class="mif-users icon"></span><span class="caption">Users</span></a></li>
</ul>
<button id="toggle-btn">Toggle Menu</button>
<ul data-role="sidenav" data-toggle="#toggle-btn">
<li><a href="#"><span class="mif-home icon"></span><span class="caption">Dashboard</span></a></li>
<li><a href="#"><span class="mif-cog icon"></span><span class="caption">Settings</span></a></li>
</ul>
<ul data-role="sidenav">
<li>
<a class="dropdown-toggle" href="#"><span class="mif-tree icon"></span><span class="caption">Sub menu</span></a>
<ul class="d-menu" data-role="dropdown">
<li><a href="#"><span class="mif-vpn-lock icon"></span> Subitem 1</a></li>
<li><a href="#"><span class="mif-vpn-lock icon"></span> Subitem 2</a></li>
<li class="disabled"><a href="#">Disabled item</a></li>
</ul>
</li>
</ul>
<ul data-role="sidenav">
<li class="stick-left"><a href="#"><span class="mif-home icon"></span><span class="caption">Left Stick</span></a></li>
<li class="stick-right"><a href="#"><span class="mif-cog icon"></span><span class="caption">Right Stick</span></a></li>
<li class="stick-color-red"><a href="#"><span class="mif-alert icon"></span><span class="caption">Red Stick</span></a></li>
</ul>
ParameterTypeDefaultDescription
compactedbooleanfalseInitial compacted state of the sidenav
togglestringnullCSS selector for toggle button element
expandPointstring”fs”Media breakpoint for automatic expansion (xs, sm, md, lg, xl, xxl, fs)
<ul data-role="sidenav" data-compacted="true" data-toggle="#menu-toggle" data-expand-point="lg">
<li><a href="#"><span class="caption">Menu Item</span></a></li>
</ul>
EventDescription
onMenuItemClickFired when a menu item is clicked
onCollapseFired when the sidenav collapses
onExpandFired when the sidenav expands
onSidenavCreateFired when the sidenav component is created
<ul data-role="sidenav" data-on-menu-item-click="onItemClick" data-on-expand="onExpand">
<li><a href="#"><span class="caption">Menu Item</span></a></li>
</ul>
<script>
function onItemClick(event) {
console.log('Menu item clicked:', event.target);
}
function onExpand(event) {
console.log('Sidenav expanded');
}
</script>
  • setValue(index, value) - Sets the counter value for a menu item at the specified index.
const sidenav = Metro.getPlugin('#my-sidenav', 'sidenav');
sidenav.setValue(0, 5); // Sets counter to 5 for first menu item
VariableDefault (Light)Dark ModeDescription
--sidenav-border-radius4px4pxBorder radius for menu items
--sidenav-width220px220pxWidth when expanded
--sidenav-background#f6f6f6#2b2d30Background color
--sidenav-color#191919#dfe1e5Text color
--sidenav-icon-color#191919#dfe1e5Icon color
--sidenav-counter-color#191919#dfe1e5Counter text color
--sidenav-background-hover#cecece#43454aHover background color
--sidenav-color-hover#0a0a0a#ffffffHover text color
--sidenav-background-active#68a3ff#468cffActive background color
--sidenav-color-active#ffffff#ffffffActive text color
--sidenav-border-colorvar(—border-color)var(—border-color)Border color
/* Custom styling example */
#my-sidenav {
--sidenav-width: 280px;
--sidenav-background: #1e1e1e;
--sidenav-color: #ffffff;
--sidenav-background-active: #0078d4;
}
  • .sidenav - Main sidenav container (automatically applied)
  • .expanded - Expanded state class
  • .handmade - Manual toggle state class
  • .title - Section title styling
  • .active - Active menu item
  • .disabled - Disabled menu item
  • .stick-left - Left stick indicator
  • .stick-right - Right stick indicator
  • .stick-color-{color} - Colored stick indicator (supports all Metro UI colors)
  • .icon - Icon container
  • .caption - Text caption
  • .counter - Counter badge
  • .dropdown-caret - Dropdown arrow
  • .d-menu - Dropdown submenu container
  • The sidenav automatically generates default icons from the first letters of menu item text when no icon is provided
  • The component remembers its collapsed/expanded state using local storage
  • Responsive behavior is controlled by the expandPoint parameter
  • Icons should use Metro UI icon classes (e.g., mif-home, mif-cog)
  • Dropdown submenus require the dropdown component to be included
  • Use semantic HTML structure with <ul> and <li> elements
  • Provide meaningful icons and captions for better user experience
  • Group related items under section titles for better organization
  • Use the active class to indicate the current page/section
  • Consider the expandPoint parameter based on your layout requirements
  • Test the component on different screen sizes to ensure proper responsive behavior