Navigation menu
Une navigation de site avec menus déroulants, ou un seul panneau pleine largeur qui reste ouvert pendant que son contenu glisse d’un menu à l’autre.
pnpm dlx shadcn@latest add https://hextaui.com/r/navigation-menu.jsonAjoute le composant, les tokens de thème HextaUI et les composants HextaUI dont il dépend.
Ajoutez les tokens de thème à votre CSS global, si ce n’est pas déjà fait.
Installez les dépendances.
pnpm add @base-ui/react @tabler/icons-react class-variance-authority cnCopiez et collez le code suivant dans votre projet.
components/ui/navigation-menu.tsx lib/motion.ts Mettez à jour les chemins d’import selon la configuration de votre projet.
Avec variant="panel", une seule carte couvre toute la barre. Passer d'un déclencheur à l'autre la garde ouverte et en place : seul le contenu glisse dans la direction de votre déplacement, et la hauteur s'ajuste en douceur. Rien ne se ferme, ne se rouvre ni ne saute.
Dropdown
La variante dropdown par défaut ouvre une carte sous chaque déclencheur. Passer au déclencheur suivant fait glisser la même carte et la redimensionne au nouveau contenu.
Page courante
Les liens de la barre ressemblent à des déclencheurs. Marquez la page courante avec active, qui définit aussi aria-current="page".
De droite à gauche
Les glissements du contenu suivent la direction de votre déplacement, qui s'inverse dans les mises en page de droite à gauche.
| Touche | Action |
|---|---|
| Tab | Parcourt la barre, et passe d'un déclencheur ouvert à son contenu. |
| EnterSpace | Ouvre ou ferme le menu du déclencheur qui a le focus. |
| ↑↓ | Se déplace entre les liens du contenu ouvert. |
| ←→ | Se déplace entre les déclencheurs de la barre. |
| Esc | Ferme le menu et rend le focus à son déclencheur. |
- La racine rend un
<nav>. Donnez-lui unaria-labelquand la page en comporte plusieurs. - Les déclencheurs sont des boutons qui indiquent si leur menu est ouvert, et le focus leur revient à la fermeture du menu.
- Le glissement du contenu et la surbrillance glissante deviennent des fondus quand la réduction des animations est activée.
| Prop | Type | Par défaut |
|---|---|---|
variantdropdown s'ouvre sous chaque déclencheur. panel ouvre une carte pleine largeur sous la barre, qui reste en place pendant que le contenu glisse. | "dropdown" | "panel" | "dropdown" |
showSafeAreaDessine la zone de sécurité qui garde un menu ouvert pendant que le pointeur s'y dirige. Pour le débogage et les démos. | boolean | false |
align | "start" | "center" | "end" | "start", or "center" for panel |
sideOffset | number | 8 |
value | any | – |
defaultValue | any | – |
onValueChange | (value, details) => void | – |
delayDélai avant ouverture au survol, en ms. | number | 50 |
closeDelayDélai avant fermeture après que le pointeur est parti, en ms. | number | 50 |
orientation | "horizontal" | "vertical" | "horizontal" |
| Attribut | Description |
|---|---|
data-slot="navigation-menu" | La nav, avec data-variant. |
data-slot="navigation-menu-highlight" | L'arrière-plan qui glisse entre les déclencheurs ouverts. |
data-slot="navigation-menu-popup" | La carte. Sa hauteur s'adoucit via --popup-height. |
| Attribut | Description |
|---|---|
data-slot="navigation-menu-trigger" | Ciblez les déclencheurs en CSS. |
data-popup-open | Présent tant que son menu est ouvert. Le chevron se retourne. |
| Attribut | Description |
|---|---|
data-slot="navigation-menu-content" | Le contenu d'un menu, avec data-variant. |
data-activation-direction | "left", "right", "up" ou "down" : où se trouvait le déclencheur précédent. Pilote le glissement. |
--navigation-menu-link-radius | Rayon des coins du lien, concentrique à la carte. |
| Prop | Type | Par défaut |
|---|---|---|
activeMarque la page courante. | boolean | false |
render | ReactElement | (props, state) => ReactElement | <a> |
| Attribut | Description |
|---|---|
data-slot="navigation-menu-link" | Cible les liens en CSS. Dans la barre, ils se dimensionnent comme des déclencheurs. |
data-active | Présent sur la page courante. |
- MotionLes courbes d’easing, les durées et la vérification de réduction des animations utilisées par chaque composant, ainsi que des hooks pour les morphs de taille et les surlignages glissants.
- BreadcrumbUn fil d’Ariane vers la page courante qui passe à la ligne sans risque, s’inverse dans les mises en page de droite à gauche et déploie les segments réduits sur place.
- PaginationUne navigation par pages qui garde chaque bouton en place, glisse vers la page courante et permet d’accéder à n’importe quelle page depuis les points de suspension.
- SidebarUne barre latérale d’application qui se réduit en icônes ou hors canevas, reste épinglée sous votre en-tête et devient une sheet balayable sur mobile.
- TabsPassez d’une vue à l’autre avec un indicateur qui glisse vers l’onglet actif, en contrôle segmenté ou souligné, et des listes qui défilent en cas de débordement.