Sidebar
The Sidebar component provides a collapsible side panel for navigation, settings, or other content. It can be positioned on either side of the screen and supports both static and dynamic modes.
Dependencies
Section titled “Dependencies”- Metro UI Core
- Metro UI DOM utilities
Basic Sidebar
Section titled “Basic Sidebar”<!-- Basic sidebar with header and menu --><div data-role="sidebar"> <div class="sidebar-header"> <div class="avatar"> <img src="path/to/avatar.jpg"> </div> <span class="title">John Doe</span> <span class="subtitle">Web Developer</span> </div> <ul class="sidebar-menu"> <li class="active"><a href="#"><span class="icon mif-home"></span>Home</a></li> <li><a href="#"><span class="icon mif-user"></span>Profile</a></li> <li><a href="#"><span class="icon mif-cog"></span>Settings</a></li> <li class="divider"></li> <li><a href="#"><span class="icon mif-exit"></span>Logout</a></li> </ul></div>Sidebar with Toggle Button
Section titled “Sidebar with Toggle Button”<!-- Sidebar with toggle button --><button class="button" id="sidebar-toggle">Toggle Sidebar</button>
<div data-role="sidebar" data-toggle="#sidebar-toggle"> <!-- Sidebar content --></div>Sidebar with Group Titles
Section titled “Sidebar with Group Titles”<div data-role="sidebar"> <ul class="sidebar-menu"> <li class="group-title">Main Navigation</li> <li><a href="#"><span class="icon mif-home"></span>Home</a></li> <li><a href="#"><span class="icon mif-user"></span>Profile</a></li>
<li class="group-title">Settings</li> <li><a href="#"><span class="icon mif-cog"></span>General</a></li> <li><a href="#"><span class="icon mif-bell"></span>Notifications</a></li> </ul></div>Sidebar with Hotkeys
Section titled “Sidebar with Hotkeys”<div data-role="sidebar"> <ul class="sidebar-menu"> <li><a href="#"><span class="icon mif-home"></span>Home<span class="hotkey">Alt+H</span></a></li> <li><a href="#"><span class="icon mif-user"></span>Profile<span class="hotkey">Alt+P</span></a></li> </ul></div>Component Parameters
Section titled “Component Parameters”| Parameter | Default | Description |
|---|---|---|
| menuScrollbar | false | Whether to show scrollbars in the menu |
| sidebarDeferred | 0 | Delay before initialization (in milliseconds) |
| position | ”left” | Position of the sidebar (“left” or “right”) |
| shift | null | Selector for elements to be shifted when the sidebar opens |
| staticShift | null | Selector for elements to be shifted when the sidebar is in static mode |
| toggle | null | Selector for the element that toggles the sidebar |
| duration | 300 | Duration of the animation when opening/closing (in milliseconds) |
| static | null | Breakpoint at which the sidebar becomes static (e.g., “lg”, “md”) |
| closeOutside | true | Whether to close the sidebar when clicking outside |
| onOpen | Metro.noop | Callback function when the sidebar opens |
| onClose | Metro.noop | Callback function when the sidebar closes |
| onToggle | Metro.noop | Callback function when the sidebar toggles |
| onStaticSet | Metro.noop | Callback function when the sidebar enters static mode |
| onStaticLoss | Metro.noop | Callback function when the sidebar exits static mode |
| onSidebarCreate | Metro.noop | Callback function when the sidebar is created |
API Methods
Section titled “API Methods”Metro.sidebarSetup(options)
Section titled “Metro.sidebarSetup(options)”Configure global default options for all sidebar components.
Metro.sidebarSetup({ position: "right", closeOutside: false});Instance Methods
Section titled “Instance Methods”These methods can be called on a sidebar instance:
// Get sidebar instancevar sidebar = Metro.getPlugin('#mySidebar', 'sidebar');
// Call methodssidebar.open();sidebar.close();sidebar.toggle();var isOpen = sidebar.isOpen();Static Methods
Section titled “Static Methods”These methods can be called directly on the Metro.sidebar object:
// Open sidebarMetro.sidebar.open('#mySidebar');
// Close sidebarMetro.sidebar.close('#mySidebar');
// Toggle sidebarMetro.sidebar.toggle('#mySidebar');
// Check if sidebar is openvar isOpen = Metro.sidebar.isOpen('#mySidebar');HTML Structure
Section titled “HTML Structure”<div data-role="sidebar"> <!-- Optional header --> <div class="sidebar-header"> <div class="avatar"><!-- Avatar content --></div> <span class="title"><!-- Title --></span> <span class="subtitle"><!-- Subtitle --></span> <span class="action"><!-- Action button --></span> </div>
<!-- Menu --> <ul class="sidebar-menu"> <li class="group-title"><!-- Group title --></li> <li class="active"> <a href="#"> <span class="icon"><!-- Icon --></span> <!-- Menu item text --> <span class="hotkey"><!-- Hotkey --></span> </a> </li> <li class="divider"></li> <!-- More menu items --> </ul>
<!-- Optional content --> <div class="sidebar-content"> <!-- Additional content --> </div></div>Styling with CSS Variables
Section titled “Styling with CSS Variables”The Sidebar component can be styled using the following CSS variables:
| Variable | Light Mode | Dark Mode | Description |
|---|---|---|---|
| —sidebar-width | 240px | 240px | Width of the sidebar |
| —sidebar-background | #ffffff | #2b2d30 | Background color of the sidebar |
| —sidebar-color | #191919 | #dbdfe7 | Text color of the sidebar |
| —sidebar-header-background | #f8f8f8 | #1e1f22 | Background color of the header |
| —sidebar-header-color | #191919 | #dbdfe7 | Text color of the header |
| —sidebar-border-color | #e8e8e8 | #343538 | Color of the sidebar borders |
| —sidebar-avatar-background | #ffffff | #2b2d30 | Background color of the avatar |
| —sidebar-avatar-color | #191919 | #ffffff | Text color of the avatar |
| —sidebar-avatar-border-color | #fff | #fff | Border color of the avatar |
| —sidebar-menu-background | #ffffff | #2b2d30 | Background color of the menu |
| —sidebar-menu-color | #191919 | #dbdfe7 | Text color of the menu |
| —sidebar-item-background | inherit | inherit | Background color of menu items |
| —sidebar-item-color | #191919 | #dbdfe7 | Text color of menu items |
| —sidebar-item-background-hover | #cecece | #1e1f22 | Background color of menu items on hover |
| —sidebar-item-color-hover | #0a0a0a | #ffffff | Text color of menu items on hover |
| —sidebar-item-marker-color | #468cff | #468cff | Color of the active item marker |
| —sidebar-item-color-disabled | #ccc | #43454a | Text color of disabled menu items |
Example of Custom Styling
Section titled “Example of Custom Styling”/* Custom sidebar styling */:root { --sidebar-width: 280px; --sidebar-background: #f0f7ff; --sidebar-color: #0d47a1; --sidebar-header-background: #1976d2; --sidebar-header-color: #ffffff; --sidebar-item-background-hover: #bbdefb; --sidebar-item-color-hover: #0d47a1; --sidebar-item-marker-color: #ff4081;}Available CSS Classes
Section titled “Available CSS Classes”Base Classes
Section titled “Base Classes”.sidebar- Main sidebar container.sidebar-header- Header section of the sidebar.sidebar-menu- Menu container.sidebar-content- Additional content container
Position Classes
Section titled “Position Classes”.on-left- Positions the sidebar on the left side (default).on-right- Positions the sidebar on the right side
State Classes
Section titled “State Classes”.open- Applied when the sidebar is open.static- Applied when the sidebar is in static mode
Menu Item Classes
Section titled “Menu Item Classes”.active- Indicates the active menu item.disabled- Disables a menu item.divider- Creates a divider line between menu items.group-title- Creates a group title for categorizing menu items
Element Classes
Section titled “Element Classes”.avatar- Container for user avatar in the header.title- Title text in the header.subtitle- Subtitle text in the header.action- Action button in the header.icon- Icon element in menu items.hotkey- Hotkey indicator in menu items
Dark Mode Support
Section titled “Dark Mode Support”The Sidebar component automatically adjusts its colors when the .dark-side class is applied to a parent element, providing appropriate styling for dark mode interfaces.
Accessibility
Section titled “Accessibility”The sidebar menu should use proper semantic HTML for navigation:
<nav data-role="sidebar"> <ul class="sidebar-menu" role="menu"> <li role="menuitem"><a href="#">Home</a></li> <!-- More menu items --> </ul></nav>Best Practices
Section titled “Best Practices”- Use the sidebar for primary navigation or secondary controls
- Keep the sidebar content focused and organized
- Use group titles to categorize menu items
- Consider using static mode for larger screens and collapsible mode for mobile
- Provide a clear toggle button when the sidebar is hidden
- Use consistent icons and labels for better usability
- Ensure the sidebar doesn’t obscure important content when open
- Use the dark mode support to ensure the sidebar looks appropriate in both light and dark interfaces