Accordion Menu
A collapsible accordion-style menu with smooth animations and nested submenu support, perfect for organizing complex navigation structures.
Responsive Design
Yes
Dark Mode Support
No
lines
683
Browser Compatibility
No
Live Preview
Interact with the component without leaving the page.
Accordion Menu
A sophisticated collapsible accordion-style menu with smooth animations and nested submenu support. Perfect for organizing complex navigation structures in admin panels, dashboards, and content management systems.
Features
- Nested Structure: Support for multiple levels of submenus
- Smooth Animations: CSS transitions for expand/collapse actions
- Keyboard Navigation: Full keyboard support with arrow keys
- Active State Management: Visual indication of current page/section
- Responsive Design: Adapts to different screen sizes
- Accessibility: ARIA attributes and proper focus management
- Auto-collapse: Other sections close when a new one opens
Key Components
Main Menu Items
- Primary navigation links with icons and text
- Expandable sections with arrow indicators
- Hover and active states for visual feedback
- Support for both links and toggle buttons
Submenu System
- Secondary navigation nested under main items
- Smooth height transitions for expand/collapse
- Distinct styling to show hierarchy
- Support for further nesting (third level)
Interactive Elements
- Click handlers for expand/collapse functionality
- Keyboard navigation with arrow keys
- Focus management for accessibility
- Visual feedback for all interactions
Customization Options
- Colors: Modify background, text, and accent colors
- Icons: Replace emoji icons with icon fonts or SVGs
- Spacing: Adjust padding and margins for different densities
- Animation Speed: Customize transition durations
- Width: Change menu width for different layouts
- Levels: Add or remove nesting levels as needed
Animation Details
Expand Animation
- Arrow rotates 180 degrees
- Submenu max-height increases from 0
- Content slides down smoothly
- Background color changes for context
Collapse Animation
- Arrow rotates back to original position
- Submenu max-height decreases to 0
- Content slides up and hides
- Background returns to default
Keyboard Controls
- Arrow Down/Up: Navigate between menu items
- Arrow Right: Expand submenu (if collapsed)
- Arrow Left: Collapse current level
- Enter/Space: Activate current item
- Tab: Standard focus navigation
Usage Tips
- Keep menu hierarchy to 3 levels maximum for usability
- Use consistent icons throughout the menu
- Provide clear visual hierarchy with indentation
- Test keyboard navigation thoroughly
- Consider menu state persistence across page loads
- Use semantic HTML for better accessibility
Browser Compatibility
Works in all modern browsers. Uses CSS transitions, flexbox, and modern JavaScript features for optimal performance and smooth animations.
HTML
148
lines
CSS
305
lines
JavaScript
230
lines
<div class="accordion-menu-demo">
<div class="demo-content">
<h2>Accordion Menu Demo</h2>
<p>Click on menu items with arrows to expand/collapse sections. This menu supports nested submenus and smooth animations.</p>
<div class="demo-features">
<div class="feature-item">
<div class="feature-icon">π</div>
<span>Nested Structure</span>
</div>
<div class="feature-item">
<div class="feature-icon">π―</div>
<span>Smooth Animations</span>
</div>
<div class="feature-item">
<div class="feature-icon">π±</div>
<span>Mobile Friendly</span>
</div>
</div>
</div>
<div class="accordion-menu-container">
<nav class="accordion-menu" id="accordionMenu">
<div class="menu-header">
<h3>Navigation Menu</h3>
</div>
<ul class="menu-list">
<li class="menu-item">
<a href="#" class="menu-link" data-action="dashboard">
<span class="menu-icon">π </span>
<span class="menu-text">Dashboard</span>
</a>
</li>
<li class="menu-item has-submenu">
<button class="menu-link submenu-toggle" data-submenu="products">
<span class="menu-icon">π¦</span>
<span class="menu-text">Products</span>
<span class="menu-arrow">βΌ</span>
</button>
<ul class="submenu" id="products-submenu">
<li class="submenu-item">
<a href="#" class="submenu-link" data-action="all-products">
<span class="submenu-icon">π</span>
<span class="submenu-text">All Products</span>
</a>
</li>
<li class="submenu-item">
<a href="#" class="submenu-link" data-action="add-product">
<span class="submenu-icon">β</span>
<span class="submenu-text">Add Product</span>
</a>
</li>
<li class="submenu-item has-nested">
<button class="submenu-link nested-toggle" data-nested="categories">
<span class="submenu-icon">π·οΈ</span>
<span class="submenu-text">Categories</span>
<span class="nested-arrow">βΌ</span>
</button>
<ul class="nested-menu" id="categories-nested">
<li class="nested-item">
<a href="#" class="nested-link" data-action="electronics">
<span class="nested-text">Electronics</span>
</a>
</li>
<li class="nested-item">
<a href="#" class="nested-link" data-action="clothing">
<span class="nested-text">Clothing</span>
</a>
</li>
<li class="nested-item">
<a href="#" class="nested-link" data-action="books">
<span class="nested-text">Books</span>
</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="menu-item has-submenu">
<button class="menu-link submenu-toggle" data-submenu="orders">
<span class="menu-icon">π</span>
<span class="menu-text">Orders</span>
<span class="menu-arrow">βΌ</span>
</button>
<ul class="submenu" id="orders-submenu">
<li class="submenu-item">
<a href="#" class="submenu-link" data-action="pending-orders">
<span class="submenu-icon">β³</span>
<span class="submenu-text">Pending Orders</span>
</a>
</li>
<li class="submenu-item">
<a href="#" class="submenu-link" data-action="completed-orders">
<span class="submenu-icon">β
</span>
<span class="submenu-text">Completed Orders</span>
</a>
</li>
<li class="submenu-item">
<a href="#" class="submenu-link" data-action="order-history">
<span class="submenu-icon">π</span>
<span class="submenu-text">Order History</span>
</a>
</li>
</ul>
</li>
<li class="menu-item has-submenu">
<button class="menu-link submenu-toggle" data-submenu="users">
<span class="menu-icon">π₯</span>
<span class="menu-text">Users</span>
<span class="menu-arrow">βΌ</span>
</button>
<ul class="submenu" id="users-submenu">
<li class="submenu-item">
<a href="#" class="submenu-link" data-action="all-users">
<span class="submenu-icon">π€</span>
<span class="submenu-text">All Users</span>
</a>
</li>
<li class="submenu-item">
<a href="#" class="submenu-link" data-action="user-roles">
<span class="submenu-icon">π</span>
<span class="submenu-text">User Roles</span>
</a>
</li>
</ul>
</li>
<li class="menu-item">
<a href="#" class="menu-link" data-action="analytics">
<span class="menu-icon">π</span>
<span class="menu-text">Analytics</span>
</a>
</li>
<li class="menu-item">
<a href="#" class="menu-link" data-action="settings">
<span class="menu-icon">βοΈ</span>
<span class="menu-text">Settings</span>
</a>
</li>
</ul>
</nav>
</div>
</div>