Saltar al contenido
npm ↗ GitHub ↗

Documentación

22/Acciones y etiquetas

Dropdown

Menú desplegable genérico con navegación por teclado, atajos, separadores y acciones destructivas.

Alineado a la derecha

HTML
<div class="cb-dropdown ml-auto self-start" data-cb-dropdown>
  <button class="cb-btn cb-btn--outline cb-btn--icon" type="button" aria-label="Más opciones" data-cb-dropdown-trigger><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><circle cx="5" cy="12" r="1.6"/><circle cx="12" cy="12" r="1.6"/><circle cx="19" cy="12" r="1.6"/></svg></button>
  <div class="cb-dropdown__panel cb-dropdown__panel--end" role="menu" aria-label="Opciones">
    <a class="cb-dropdown__item" href="#" role="menuitem">Perfil</a>
    <a class="cb-dropdown__item" href="#" role="menuitem">Configuración</a>
    <hr class="cb-dropdown__divider">
    <a class="cb-dropdown__item" href="#" role="menuitem">Cerrar sesión</a>
  </div>
</div>

Clases y modificadores

ClaseDescripción
.cb-dropdownContenedor relativo.
.cb-dropdown__panelPanel flotante. --end lo alinea a la derecha, --up lo abre hacia arriba, --wide lo ensancha.
.cb-dropdown__itemElemento. --rich para número + título + descripción; --danger para acciones destructivas.
.cb-dropdown__num, .cb-dropdown__title, .cb-dropdown__descPartes del elemento enriquecido.
.cb-dropdown__shortcutAtajo alineado a la derecha.
.cb-dropdown__label, .cb-dropdown__dividerTítulo de grupo y separador.

Atributos data-cb-*

AtributoDescripción
data-cb-dropdownActiva el componente.
data-cb-dropdown-triggerBotón que abre (por defecto, el primer button).
data-cb-dropdown-panelPanel (por defecto, .cb-dropdown__panel).
data-cb-dropdown-hoverTambién abre con hover.
data-cb-dropdown-closeCualquier elemento dentro del panel que deba cerrarlo.

JavaScript

EventoCuándo se dispara
cb:open / cb:closeAl abrir o cerrar. cb:open se puede cancelar.
cb:selectAl elegir un menuitem (detail.item, detail.value).

Escuchar la selección:

JS
document.querySelector('#acciones').addEventListener('cb:select', (event) => {
  console.log(event.detail.value);
});

Accesibilidad

  • El botón recibe aria-expanded, aria-controls y aria-haspopup="menu".
  • Esc cierra y devuelve el foco al botón; un clic fuera también cierra.
  • Usa role="menu" solo para acciones. Para enlaces de navegación deja el panel sin rol.