Tabs
Wechsle zwischen Ansichten mit einem Indikator, der zum aktiven Tab gleitet, als Segmented Control oder Unterstrich, und Listen, die bei Überlauf scrollen.
Overview
Visitors are up 12% this week, mostly from search.
pnpm dlx shadcn@latest add https://hextaui.com/r/tabs.jsonFügt die Komponente, die HextaUI-Theme-Tokens und alle HextaUI-Komponenten hinzu, von denen sie abhängt.
Füge die Theme-Tokens zu deinem globalen CSS hinzu, falls du das noch nicht getan hast.
Installiere die Abhängigkeiten.
pnpm add @base-ui/react class-variance-authority cnKopiere den folgenden Code und füge ihn in dein Projekt ein.
components/ui/tabs.tsx Passe die Importpfade an dein Projekt-Setup an.
Ein Indikator gleitet zum aktiven Tab und passt sich ihm in der Größe an, während der Inhalt sofort wechselt, sodass häufiges Wechseln nie auf eine Animation wartet. Der Indikator wird vor der Hydration platziert und springt daher beim Laden nie herein.
Unterstreichung
variant="line" an TabsList lässt eine Unterstreichung statt einer Pille gleiten.
Viele Tabs
Passen die Tabs nicht, scrollt die Liste seitlich, blendet die Ränder mit mehr Inhalt aus und scrollt den aktiven oder fokussierten Tab in den Blick.
Viele Tabs, segmentiert
Der Pill-Stil scrollt genauso und behält seine Spur, während der gewählte Tab im Blick bleibt.
Icons und Zähler
Setze Icons und Badges in Trigger.
Vertikal
orientation="vertical" stapelt die Tabs; die Unterstreichung wandert zur Seite.
Deaktiviert
Deaktivierte Tabs werden von der Tastatur übersprungen.
Kontrolliert
Übergib value und onValueChange. Änderungen von außen lassen den Indikator ebenfalls gleiten.
Rechts nach links
Tabs, Pfeiltasten und der Indikator folgen der Leserichtung.
| Taste | Aktion |
|---|---|
| Tab | Wechselt in die Liste zum aktiven Tab, dann in das Panel. |
| ←→ | Wechselt zwischen Tabs, an den Enden umlaufend. ↑ und ↓ bei vertikal. |
| HomeEnd | Springt zum ersten oder letzten Tab. |
| EnterSpace | Öffnet den fokussierten Tab. Setze activateOnFocus an TabsList, um Tabs zu öffnen, während der Fokus wandert. |
- Die Liste ist eine
tablist; jeder Trigger ist eintab, der seintabpanelsteuert. - Panels sind fokussierbar, sodass Tastaturnutzer Inhalt ohne Links oder Buttons erreichen.
- Bei reduzierter Bewegung springt der Indikator, statt zu gleiten.
| Prop | Typ | Standard |
|---|---|---|
value | any | – |
defaultValue | any | 0 |
onValueChange | (value, details) => void | – |
orientation | "horizontal" | "vertical" | "horizontal" |
| Attribut | Beschreibung |
|---|---|
data-activation-direction | "left", "right", "up" oder "down": wo der neue Tab relativ zum alten liegt. |
| Prop | Typ | Standard |
|---|---|---|
variant | "default" | "line" | "default" |
activateOnFocus | boolean | false |
loopFocus | boolean | true |
| Attribut | Beschreibung |
|---|---|
data-slot="tabs-indicator" | Die gleitende Pille oder Unterstreichung. |
data-scrolled-start / data-scrolled-end | Vorhanden, wenn die Liste in diese Richtung scrollen kann. |
--active-tab-left / --active-tab-width | Position und Größe des aktiven Tabs, auch -top und -height. |
| Prop | Typ | Standard |
|---|---|---|
value | any | – |
disabled | boolean | false |
render | ReactElement | (props, state) => ReactElement | <button> |
| Attribut | Beschreibung |
|---|---|
data-active | Der geöffnete Tab. |
data-disabled | Der Tab ist deaktiviert. |
| Prop | Typ | Standard |
|---|---|---|
value | any | – |
keepMountedHalte das Panel im DOM, während es verborgen ist. | boolean | false |
- BreadcrumbEine Linkspur zur aktuellen Seite, die sicher umbricht, sich in Right-to-left-Layouts spiegelt und eingeklappte Segmente an Ort und Stelle erweitert.
- Navigation menuSeitennavigation mit Dropdowns oder einem Panel in voller Breite, das offen bleibt, während der Inhalt zwischen Menüs gleitet.
- PaginationSeitennavigation, die jeden Button an seinem Platz hält, zur aktuellen Seite gleitet und über die Auslassungspunkte zu jeder Seite springt.
- SidebarEine App-Seitenleiste, die zu Icons oder off-canvas einklappt, unter deinem Header fixiert bleibt und auf Smartphones zu einem wischbaren Sheet wird.
In Blocks verwendet
Blocks, die auf Tabs aufbauen.