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 sercontextotoolbar). -
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, omenuitempara mejorar la accesibilidad. -
Estiliza con CSS:
Personaliza el diseño para que se vea como un menú interactivo. -
Usa JavaScript para funcionalidad:
Implementa eventos comoclickokeydownpara 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!