Tabs
Passez 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.
Overview
Visitors are up 12% this week, mostly from search.
pnpm dlx shadcn@latest add https://hextaui.com/r/tabs.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 class-variance-authority cnCopiez et collez le code suivant dans votre projet.
components/ui/tabs.tsx Mettez à jour les chemins d’import selon la configuration de votre projet.
Un seul indicateur glisse jusqu'à l'onglet actif et se redimensionne pour l'épouser, tandis que le contenu change instantanément pour que les changements fréquents n'attendent jamais une animation. L'indicateur est placé avant l'hydratation, il n'apparaît donc jamais d'un coup au chargement.
Soulignement
variant="line" sur TabsList fait glisser un soulignement plutôt qu'une pastille.
Nombreux onglets
Quand les onglets ne tiennent pas, la liste défile latéralement, estompe les bords où il y a plus à voir, et amène l'onglet actif ou focalisé dans la vue.
Nombreux onglets, segmentés
Le style pill défile de la même façon, en gardant sa piste pendant que l'onglet choisi reste visible.
Icônes et compteurs
Placez des icônes et des badges dans les déclencheurs.
Vertical
orientation="vertical" empile les onglets ; le soulignement passe sur le côté.
Désactivé
Les onglets désactivés sont ignorés par le clavier.
Contrôlé
Passez value et onValueChange. Les changements venus de l'extérieur font aussi glisser l'indicateur.
De droite à gauche
Les onglets, les flèches et l'indicateur suivent le sens de lecture.
| Touche | Action |
|---|---|
| Tab | Entre dans la liste sur l'onglet actif, puis dans le panneau. |
| ←→ | Se déplace entre les onglets, en bouclant aux extrémités. ↑ et ↓ en vertical. |
| HomeEnd | Va au premier ou au dernier onglet. |
| EnterSpace | Ouvre l'onglet qui a le focus. Définissez activateOnFocus sur TabsList pour ouvrir les onglets au fil du focus. |
- La liste est un
tablist; chaque déclencheur est untabqui contrôle sontabpanel. - Les panneaux sont focalisables, pour que les utilisateurs du clavier atteignent un contenu sans liens ni boutons.
- Avec la réduction des animations, l'indicateur saute au lieu de glisser.
| Prop | Type | Par défaut |
|---|---|---|
value | any | – |
defaultValue | any | 0 |
onValueChange | (value, details) => void | – |
orientation | "horizontal" | "vertical" | "horizontal" |
| Attribut | Description |
|---|---|
data-activation-direction | "left", "right", "up" ou "down" : où se trouve le nouvel onglet par rapport à l'ancien. |
| Prop | Type | Par défaut |
|---|---|---|
variant | "default" | "line" | "default" |
activateOnFocus | boolean | false |
loopFocus | boolean | true |
| Attribut | Description |
|---|---|
data-slot="tabs-indicator" | La pastille ou le soulignement glissant. |
data-scrolled-start / data-scrolled-end | Présent quand la liste peut défiler dans ce sens. |
--active-tab-left / --active-tab-width | Position et taille de l'onglet actif, aussi -top et -height. |
| Prop | Type | Par défaut |
|---|---|---|
value | any | – |
disabled | boolean | false |
render | ReactElement | (props, state) => ReactElement | <button> |
| Attribut | Description |
|---|---|
data-active | L'onglet ouvert. |
data-disabled | L'onglet est désactivé. |
| Prop | Type | Par défaut |
|---|---|---|
value | any | – |
keepMountedGarde le panneau dans le DOM tant qu'il est masqué. | boolean | false |
- 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.
- Navigation menuUne 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.
- 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.
Utilisé dans les blocks
Des blocks qui s’appuient sur Tabs.