Category Β· Navigation Menus Difficulty Level Β· Intermediate Published on Β· January 17, 2024

Accordion Menu

A collapsible accordion-style menu with smooth animations and nested submenu support, perfect for organizing complex navigation structures.

#accordion #collapsible #nested #sidebar #vertical

Responsive Design

Yes

Dark Mode Support

No

lines

683

Browser Compatibility

No

Live Preview

Interact with the component without leaving the page.

400px

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

  • 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
  • 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

  1. Arrow rotates 180 degrees
  2. Submenu max-height increases from 0
  3. Content slides down smoothly
  4. Background color changes for context

Collapse Animation

  1. Arrow rotates back to original position
  2. Submenu max-height decreases to 0
  3. Content slides up and hides
  4. 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

  1. Keep menu hierarchy to 3 levels maximum for usability
  2. Use consistent icons throughout the menu
  3. Provide clear visual hierarchy with indentation
  4. Test keyboard navigation thoroughly
  5. Consider menu state persistence across page loads
  6. 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>

              
148lines
5661characters
HTMLLanguage

Related Code Snippets

Explore template packs

Need larger building blocks? Browse responsive landing pages and component bundles.

Open HTML Template Library β†’