Saltar al contenido
EspañolEnglish
Todos los componentes (204)

Menú de navegación

Navegación · NavigationMenu · .amset-navmenu

Qué es y cuándo usarlo

La navegación principal de un sitio: enlaces directos y botones que despliegan un panel con más enlaces («Productos», «El taller»), con su descripción si hace falta.

Cuándo usarlo

  • En la cabecera de un sitio o una tienda con secciones que tienen varias páginas dentro.
  • Cuando conviene explicar adónde lleva cada enlace con una frase.

Cuándo no

  • Para acciones que no cambian de página: es una Menubar o un ActionMenu.
  • Para la navegación lateral de una aplicación: es SideNav.
  • Con pocas secciones sin nada dentro: bastan los enlaces.

Teclado: es la navegación con despliegues de ARIA, no un menú: son enlaces de verdad dentro de un <nav>. Cada panel va justo después de su botón, así que Tab entra en él y sigue el orden de la pantalla; la flecha abajo sobre un botón abierto entra en su panel. Escape cierra devolviendo el foco, y salir con Tab o pulsar fuera lo cierra.

Accesibilidad: los botones llevan aria-expanded y aria-controls, la página actual lleva aria-current="page" y un botón apagado no se alcanza con el teclado. Con el ratón se abre al pasar por encima (con una pausa) y pulsar el botón lo fija, que es lo que funciona en una pantalla táctil.

Enrutador: con onNavigate (o el de RouterProvider) los enlaces internos navegan sin recargar; el clic con Ctrl, el central y los de otro sitio se abren como siempre.

Aspecto fino: variable CSS --amset-navmenu-panel-width (ancho del panel; nunca más que la pantalla).

Cómo se ve

Pasa el ratón por «Productos» o llega con el tabulador.

<NavigationMenu
  label="Principal"
  items={[
    { key: "inicio", label: "Inicio", href: "/", current: true },
    { key: "productos", label: "Productos", links: [{ key: "anillos", label: "Anillos", href: "/anillos" }] },
  ]}
  onNavigate={(href) => router.push(href)}
/>

Props

Se importa con import { NavigationMenu } from '@amset/ui'. Las obligatorias van marcadas.

PropTipoPara qué sirve
itemsobligatoriareadonly NavigationMenuItem[]—
labelobligatoriastringQué navegación es, para el lector de pantalla: «Principal».
classNamestringSe une a las clases de la biblioteca, no las sustituye.
closeDelaynumberMilisegundos de gracia al salir: es lo que deja cruzar del botón al panel.
offsetnumber—
onNavigate(href: string) => voidSi se pasa, los enlaces internos llaman a esto en vez de recargar la página.
openDelaynumberMilisegundos con el ratón encima antes de abrir. Con otro panel ya abierto, el cambio es inmediato.

Acepta además los atributos del elemento que pinta: className, style, data-*, aria-* y sus eventos.

Mandos

Estas variables CSS son la forma de adaptarlo. Se declaran sobre el selector del componente, no en :root: la hoja las redeclara en la propia regla y una declaración en el mismo elemento gana siempre.

VariablePor defecto
--amset-navmenu-panel-widthmin(36rem, calc(100vw - 2rem))

Cómo se cambia

.amset-navmenu {
  --amset-navmenu-panel-width: ...;
}

En el banco de pruebas

Cada estado y cada variante, para tocarlos de uno en uno, en su ficha de ui.amset.tech: