Menú
Un botón que abre una lista de opciones, como los menús de idioma, versión y tema de la barra de arriba. Una de las opciones puede quedar marcada como elegida.
Ver en GitHubEn esta página
Ejemplo
Ábrelo con el ratón o con el teclado (Intro o Espacio sobre el botón).
<div style="display: flex; align-items: flex-start; justify-content: flex-end; min-height: 230px">
<div class="gm-menu" data-gm-menu>
<button type="button" class="gm-menu__trigger" aria-haspopup="menu" aria-expanded="false" aria-label="Tema: Automático">
<i class="gmi gmi-circle-half" aria-hidden="true"></i>
<i class="gmi gmi-chevron-expand gm-menu__chevron" aria-hidden="true"></i>
</button>
<ul class="gm-menu__list" role="menu" aria-label="Tema" hidden>
<li role="none"><button type="button" class="gm-menu__item" role="menuitemradio" aria-checked="false" data-value="light"><i class="gmi gmi-sun" aria-hidden="true"></i><span>Claro</span><i class="gmi gmi-check gm-menu__check" aria-hidden="true"></i></button></li>
<li role="none"><button type="button" class="gm-menu__item" role="menuitemradio" aria-checked="false" data-value="dark"><i class="gmi gmi-moon" aria-hidden="true"></i><span>Oscuro</span><i class="gmi gmi-check gm-menu__check" aria-hidden="true"></i></button></li>
<li role="none"><button type="button" class="gm-menu__item" role="menuitemradio" aria-checked="true" data-value="auto"><i class="gmi gmi-circle-half" aria-hidden="true"></i><span>Automático</span><i class="gmi gmi-check gm-menu__check" aria-hidden="true"></i></button></li>
</ul>
</div>
</div>Alineado a la izquierda
La lista se abre alineada a la derecha del botón. Junto al borde izquierdo, añade .gm-menu--start.
<div style="min-height: 190px">
<div class="gm-menu gm-menu--start" data-gm-menu>
<button type="button" class="gm-menu__trigger" aria-haspopup="menu" aria-expanded="false" aria-label="Idioma: Español">
<i class="gmi gmi-translate" aria-hidden="true"></i> ES
<i class="gmi gmi-chevron-expand gm-menu__chevron" aria-hidden="true"></i>
</button>
<ul class="gm-menu__list" role="menu" aria-label="Idioma" hidden>
<li role="none"><button type="button" class="gm-menu__item" role="menuitemradio" aria-checked="false" data-value="en"><span>English</span><i class="gmi gmi-check gm-menu__check" aria-hidden="true"></i></button></li>
<li role="none"><button type="button" class="gm-menu__item" role="menuitemradio" aria-checked="true" data-value="es"><span>Español</span><i class="gmi gmi-check gm-menu__check" aria-hidden="true"></i></button></li>
</ul>
</div>
</div>Script
El framework da el aspecto. Para abrir, cerrar y moverse con el teclado, carga el script opcional:
<script type="module">
import { initMenus } from 'glassmarshmallow/js/menu.js';
initMenus();
</script>Al elegir una opción, el menú lanza el evento gm-menu-select con el data-value de la opción:
document.querySelector('.gm-menu').addEventListener('gm-menu-select', (event) => {
console.log(event.detail.value); // 'dark'
});Teclado
| Tecla | Qué hace |
|---|---|
| Intro / Espacio | Abre el menú (en el botón) o elige la opción |
| ↓ ↑ | Opción siguiente o anterior |
| Inicio / Fin | Primera o última opción |
| Tab | Recorre las opciones sin salir del menú |
| Escape | Cierra el menú y vuelve al botón |
Accesibilidad
- El botón lleva
aria-haspopup="menu",aria-expandedy unaria-labelque dice qué está elegido («Tema: Automático»). - Las opciones son
menuitemradioconaria-checked; el icono de la marca es solo visual. - Botón y opciones miden 44 px (WCAG 2.5.5, AAA). Texto de 15:1 o más.