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.
Diseño Responsivo
Sí
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.
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
- La flecha rota 180 grados
- La altura máxima del submenú aumenta desde 0
- El contenido se desliza hacia abajo suavemente
- El color de fondo cambia para contexto
Animación de Contracción
- La flecha rota de vuelta a la posición original
- La altura máxima del submenú disminuye a 0
- El contenido se desliza hacia arriba y se oculta
- 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
- Mantener la jerarquía del menú a máximo 3 niveles para usabilidad
- Usar iconos consistentes en todo el menú
- Proporcionar jerarquía visual clara con indentación
- Probar navegación por teclado exhaustivamente
- Considerar persistencia del estado del menú entre cargas de página
- 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>