Categoría · Menús de Navegación Nivel de Dificultad · Intermedio Publicado el · 17 de enero de 2024

Menú Acordeón

Un menú estilo acordeón plegable con animaciones suaves y soporte para submenús anidados, perfecto para organizar estructuras de navegación complejas.

#accordion #collapsible #nested #sidebar #vertical

Diseño Responsivo

Soporte para Modo Oscuro

No

líneas

683

Compatibilidad del Navegador

No

Vista Previa en Vivo

Interactúa con el componente sin salir de la página.

400px

Menú Acordeón

Un sofisticado menú estilo acordeón plegable con animaciones suaves y soporte para submenús anidados. Perfecto para organizar estructuras de navegación complejas en paneles de administración, tableros de control y sistemas de gestión de contenido.

Características

  • Estructura Anidada: Soporte para múltiples niveles de submenús
  • Animaciones Suaves: Transiciones CSS para acciones de expandir/contraer
  • Navegación por Teclado: Soporte completo de teclado con teclas de flecha
  • Gestión de Estado Activo: Indicación visual de página/sección actual
  • Diseño Responsivo: Se adapta a diferentes tamaños de pantalla
  • Accesibilidad: Atributos ARIA y gestión adecuada del foco
  • Auto-contraer: Otras secciones se cierran cuando se abre una nueva

Componentes Clave

Elementos del Menú Principal

  • Enlaces de navegación primaria con iconos y texto
  • Secciones expandibles con indicadores de flecha
  • Estados de hover y activo para retroalimentación visual
  • Soporte para enlaces y botones de alternancia

Sistema de Submenús

  • Navegación secundaria anidada bajo elementos principales
  • Transiciones de altura suaves para expandir/contraer
  • Estilo distintivo para mostrar jerarquía
  • Soporte para anidamiento adicional (tercer nivel)

Elementos Interactivos

  • Manejadores de clic para funcionalidad expandir/contraer
  • Navegación por teclado con teclas de flecha
  • Gestión del foco para accesibilidad
  • Retroalimentación visual para todas las interacciones

Opciones de Personalización

  • Colores: Modificar colores de fondo, texto y acentos
  • Iconos: Reemplazar iconos emoji con fuentes de iconos o SVGs
  • Espaciado: Ajustar padding y márgenes para diferentes densidades
  • Velocidad de Animación: Personalizar duraciones de transición
  • Ancho: Cambiar ancho del menú para diferentes diseños
  • Niveles: Agregar o eliminar niveles de anidamiento según sea necesario

Detalles de Animación

Animación de Expansión

  1. La flecha rota 180 grados
  2. La altura máxima del submenú aumenta desde 0
  3. El contenido se desliza hacia abajo suavemente
  4. El color de fondo cambia para contexto

Animación de Contracción

  1. La flecha rota de vuelta a la posición original
  2. La altura máxima del submenú disminuye a 0
  3. El contenido se desliza hacia arriba y se oculta
  4. El fondo vuelve al predeterminado

Controles de Teclado

  • Flecha Abajo/Arriba: Navegar entre elementos del menú
  • Flecha Derecha: Expandir submenú (si está contraído)
  • Flecha Izquierda: Contraer nivel actual
  • Enter/Espacio: Activar elemento actual
  • Tab: Navegación de foco estándar

Consejos de Uso

  1. Mantener la jerarquía del menú a máximo 3 niveles para usabilidad
  2. Usar iconos consistentes en todo el menú
  3. Proporcionar jerarquía visual clara con indentación
  4. Probar navegación por teclado exhaustivamente
  5. Considerar persistencia del estado del menú entre cargas de página
  6. Usar HTML semántico para mejor accesibilidad

Compatibilidad del Navegador

Funciona en todos los navegadores modernos. Utiliza transiciones CSS, flexbox y características modernas de JavaScript para rendimiento óptimo y animaciones suaves.

HTML

148

líneas

CSS

305

líneas

JavaScript

230

líneas


                <div class="accordion-menu-demo">
  <div class="demo-content">
    <h2>Demo de Menú Acordeón</h2>
    <p>Haz clic en los elementos del menú con flechas para expandir/contraer secciones. Este menú soporta submenús anidados y animaciones suaves.</p>
    
    <div class="demo-features">
      <div class="feature-item">
        <div class="feature-icon">📁</div>
        <span>Estructura Anidada</span>
      </div>
      <div class="feature-item">
        <div class="feature-icon">🎯</div>
        <span>Animaciones Suaves</span>
      </div>
      <div class="feature-item">
        <div class="feature-icon">📱</div>
        <span>Amigable para Móviles</span>
      </div>
    </div>
  </div>
  
  <div class="accordion-menu-container">
    <nav class="accordion-menu" id="accordionMenu">
      <div class="menu-header">
        <h3>Menú de Navegación</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">Panel Principal</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">Productos</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">Todos los Productos</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">Agregar Producto</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">Categorías</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">Electrónicos</span>
                  </a>
                </li>
                <li class="nested-item">
                  <a href="#" class="nested-link" data-action="clothing">
                    <span class="nested-text">Ropa</span>
                  </a>
                </li>
                <li class="nested-item">
                  <a href="#" class="nested-link" data-action="books">
                    <span class="nested-text">Libros</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">Pedidos</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">Pedidos Pendientes</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">Pedidos Completados</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">Historial de Pedidos</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">Usuarios</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">Todos los Usuarios</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">Roles de Usuario</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">Analíticas</span>
          </a>
        </li>
        
        <li class="menu-item">
          <a href="#" class="menu-link" data-action="settings">
            <span class="menu-icon">⚙️</span>
            <span class="menu-text">Configuración</span>
          </a>
        </li>
      </ul>
    </nav>
  </div>
</div>

              
148líneas
5751caracteres
HTMLIdioma

Fragmentos de Código Relacionados

Explora packs de plantillas

¿Necesitas bloques más grandes? Descubre landings y colecciones de componentes.

Abrir la biblioteca de plantillas →