La Etiqueta MENU

Define una lista de comandos o acciones que el usuario puede realizar. Es un elemento semántico pensado para menús interactivos.
La etiqueta <menu>
define una lista de comandos o acciones que el usuario puede realizar. Es un elemento semántico pensado para menús interactivos, como:
-
Barras de herramientas.
-
Menús contextuales (ej: al hacer clic derecho).
-
Listas de opciones en aplicaciones web.
Características clave:
-
Se diferencia de
<ul>
(listas no ordenadas) en que<menu>
está orientado a acciones. -
En HTML5, se usa junto con
<li>
y elementos interactivos como<button>
o<a>
. -
Es compatible con navegadores modernos, pero su uso requiere CSS/JS para funcionalidad avanzada.
Sintaxis básica
<menu> <li><button>Copiar</button></li> <li><button>Pegar</button></li> </menu>
Ejemplos prácticos
Barra de herramientas básica
Crea una barra con acciones usando <menu>
y estilos CSS:
<menu class="toolbar"> <li><button onclick="copiarTexto()">Copiar</button></li> <li><button onclick="pegarTexto()">Pegar</button></li> <li><button onclick="guardar()">Guardar</button></li> </menu> <style> .toolbar { list-style: none; padding: 0; display: flex; gap: 10px; background: #f0f0f0; padding: 10px; border-radius: 8px; } .toolbar button { padding: 8px 12px; cursor: pointer; } </style>
Menú contextual personalizado (con JavaScript)
Crea un menú que aparezca al hacer clic derecho:
<div id="area-contexto" style="padding: 50px; border: 1px solid #ccc;"> Haz clic derecho aquí. </div> <menu id="menu-contextual" hidden> <li><button onclick="editar()">Editar</button></li> <li><button onclick="eliminar()">Eliminar</button></li> </menu> <script> const area = document.getElementById('area-contexto'); const menu = document.getElementById('menu-contextual'); area.addEventListener('contextmenu', (e) => { e.preventDefault(); menu.style.left = `${e.clientX}px`; menu.style.top = `${e.clientY}px`; menu.hidden = false; }); document.addEventListener('click', () => { menu.hidden = true; }); </script> <style> #menu-contextual { position: fixed; background: white; border: 1px solid #ccc; border-radius: 4px; padding: 8px 0; list-style: none; box-shadow: 0 2px 10px rgba(0,0,0,0.1); } #menu-contextual button { width: 100%; padding: 8px 16px; text-align: left; background: none; border: none; cursor: pointer; } #menu-contextual button:hover { background: #f0f0f0; } </style>
Atributos importantes
-
type
: Define el tipo de menú (en desuso en HTML5, pero originalmente podía sercontext
otoolbar
). -
label
: Nombre del menú (para menús anidados o accesibilidad).
Errores comunes
Usar <menu>
como lista normal:
Evita reemplazar <ul>
o <ol>
con <menu>
si no hay acciones involucradas.
<!-- Incorrecto --> <menu> <li>Manzana</li> <li>Plátano</li> </menu>
Ignorar la accesibilidad:
Los lectores de pantalla necesitan roles ARIA para interpretar el menú:
<menu role="toolbar"> <li role="menuitem"><button>...</button></li> </menu>
Mejores prácticas
-
Combina con ARIA:
Usa roles comotoolbar
,menubar
, omenuitem
para mejorar la accesibilidad. -
Estiliza con CSS:
Personaliza el diseño para que se vea como un menú interactivo. -
Usa JavaScript para funcionalidad:
Implementa eventos comoclick
okeydown
para manejar acciones. -
Alternativas modernas:
Para menús complejos, considera usar<div>
con ARIA o componentes de librerías como React.
Limitaciones
-
Compatibilidad:
Algunas propiedades (como menús contextuales nativos contype="context"
) están obsoletas o no son soportadas. -
Funcionalidad básica:
<menu>
solo estructura el contenido; la interacción requiere JavaScript.
Casos de uso reales
-
Editores de texto: Barras de formato (negrita, cursiva).
-
Aplicaciones web: Menús de acciones rápidas (eliminar, compartir).
-
Paneles de administración: Acceso a funciones comunes.
Conclusión
La etiqueta <menu>
es una herramienta semántica para crear listas de acciones interactivas en HTML. Aunque su uso es menos común que otros elementos, es valiosa en aplicaciones web complejas donde la claridad semántica y la accesibilidad son prioritarias. ¡Experimenta con ella en tus proyectos!