Navigation menu
Navegación del sitio con menús desplegables, o un panel de ancho completo que permanece abierto mientras su contenido se desliza entre menús.
pnpm dlx shadcn@latest add https://hextaui.com/r/navigation-menu.jsonAñade el componente, los tokens del tema de HextaUI y los componentes de HextaUI de los que depende.
Añade los tokens del tema a tu CSS global, si aún no lo has hecho.
Instala las dependencias.
pnpm add @base-ui/react @tabler/icons-react class-variance-authority cnCopia y pega el siguiente código en tu proyecto.
components/ui/navigation-menu.tsx lib/motion.ts Actualiza las rutas de importación para que coincidan con la configuración de tu proyecto.
Con variant="panel", una sola tarjeta abarca toda la barra. Al moverte entre triggers permanece abierta y en su sitio: solo el contenido se desliza hacia la dirección en que te moviste, y la altura se suaviza para ajustarse. Nada se cierra, se reabre ni salta.
Dropdown
La variante dropdown por defecto abre una tarjeta bajo cada trigger. Al pasar al siguiente trigger, esa misma tarjeta se desliza y se redimensiona al nuevo contenido.
Página actual
Los enlaces de la barra se ven como triggers. Marca la página actual con active, que también define aria-current="page".
De derecha a izquierda
Los deslizamientos del contenido siguen la dirección en la que te mueves, que se invierte en diseños de derecha a izquierda.
| Key | Acción |
|---|---|
| Tab | Se mueve por la barra, y desde un trigger abierto hacia su contenido. |
| EnterSpace | Abre o cierra el menú del trigger enfocado. |
| ↑↓ | Se mueve entre los enlaces del contenido abierto. |
| ←→ | Se mueve entre los triggers de la barra. |
| Esc | Cierra el menú y devuelve el foco a su trigger. |
- La raíz renderiza un
<nav>. Dale unaria-labelcuando la página tenga más de uno. - Los triggers son botones que indican si su menú está abierto, y el foco vuelve a ellos cuando el menú se cierra.
- El deslizamiento del contenido y el resaltado deslizante se convierten en fundidos cuando el movimiento reducido está activado.
| Prop | Tipo | Predeterminado |
|---|---|---|
variantdropdown se abre bajo cada trigger. panel abre una tarjeta de ancho completo bajo la barra que permanece quieta mientras el contenido se desliza. | "dropdown" | "panel" | "dropdown" |
showSafeAreaDibuja el área segura que mantiene abierto un menú mientras el puntero se dirige hacia él. Para depuración y demos. | boolean | false |
align | "start" | "center" | "end" | "start", or "center" for panel |
sideOffset | number | 8 |
value | any | – |
defaultValue | any | – |
onValueChange | (value, details) => void | – |
delayEspera antes de abrir al pasar el cursor, en ms. | number | 50 |
closeDelayEspera antes de cerrar tras salir el puntero, en ms. | number | 50 |
orientation | "horizontal" | "vertical" | "horizontal" |
| Atributo | Descripción |
|---|---|
data-slot="navigation-menu" | El nav, con data-variant. |
data-slot="navigation-menu-highlight" | El fondo que se desliza entre los triggers abiertos. |
data-slot="navigation-menu-popup" | La tarjeta. Su altura se suaviza mediante --popup-height. |
| Atributo | Descripción |
|---|---|
data-slot="navigation-menu-trigger" | Apunta a los triggers en CSS. |
data-popup-open | Presente mientras su menú está abierto. El chevron se voltea. |
| Atributo | Descripción |
|---|---|
data-slot="navigation-menu-content" | El contenido de un menú, con data-variant. |
data-activation-direction | "left", "right", "up" o "down": dónde estaba el trigger anterior. Controla el deslizamiento. |
--navigation-menu-link-radius | Radio de las esquinas del enlace, concéntrico con la tarjeta. |
| Prop | Tipo | Predeterminado |
|---|---|---|
activeMarca la página actual. | boolean | false |
render | ReactElement | (props, state) => ReactElement | <a> |
| Atributo | Descripción |
|---|---|
data-slot="navigation-menu-link" | Apunta a los enlaces en CSS. En la barra se dimensionan como los triggers. |
data-active | Presente en la página actual. |
- MotionLas curvas de easing, duraciones y la comprobación de movimiento reducido con las que se anima cada componente, además de hooks para transformaciones de tamaño y resaltados deslizantes.
- BreadcrumbUn rastro de enlaces hasta la página actual que se ajusta de forma segura, se refleja en diseños de derecha a izquierda y expande los segmentos colapsados en su lugar.
- PaginationNavegación de páginas que mantiene cada botón en su sitio, se desliza hasta la página actual y salta a cualquier página desde los puntos suspensivos.
- SidebarUna barra lateral de la app que se contrae a iconos o fuera del lienzo, se mantiene fija bajo tu encabezado y se convierte en una hoja deslizable en móviles.
- TabsCambia entre vistas con un indicador que se desliza hasta la pestaña activa, como control segmentado o con subrayado, y listas que se desplazan cuando desbordan.