Table
Eine responsive Tabelle mit Flächenstil, umbrechenden oder kompakten Zellen, fixierten Kopfzeilen, angehefteten Spalten und Scroll-Hinweisen.
| Invoice | Client | Status | Amount |
|---|---|---|---|
| INV-0418 | Northwind | $2,400.00 | |
| INV-0419 | Globex | $860.00 | |
| INV-0420 | Initech | $1,320.50 | |
| INV-0421 | Umbrella | $415.00 | |
| Total | $4,995.50 | ||
pnpm dlx shadcn@latest add https://hextaui.com/r/table.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 class-variance-authority cnKopiere den folgenden Code und füge ihn in dein Projekt ein.
components/ui/table.tsx Passe die Importpfade an dein Projekt-Setup an.
Nutze <TableHead scope="row"> für die Zelle, die jede Zeile benennt. Sie wird für Screenreader als Header der Zeile gelesen und erhält eine stärkere Textfarbe. Für Sortieren, Filtern und Auswahl baue auf <DataTable /> auf.
Standard
Die Standardvariante hat keine Fläche, nur feine Linien zwischen den Zeilen, für Tabellen in einer Karte oder einem Seitenabschnitt. <TableCaption /> beschreibt die Tabelle darunter.
Kompakt
size="sm" verringert Zeilenhöhe und Padding für dichte Daten.
Umbrechender Text
Zellen bleiben standardmäßig in einer Zeile, was zu Daten passt. wrap lässt sie umbrechen und richtet Zeilen oben aus, für Fließtext wie Glossare oder API-Referenzen. Kombiniere es mit table-fixed und Spaltenbreiten.
Breite Tabellen
Tabellen, die breiter als ihr Container sind, scrollen seitlich. Weiche Fades zeigen, dass es auf beiden Seiten mehr gibt, und der Scrollbereich wird fokussierbar, sodass Tastaturnutzer ihn mit den Pfeiltasten scrollen können. Schalte die Fades mit scrollFade={false} ab.
Fixierte Spalte
pinned="start" hält die erste Spalte im Blick, während der Rest scrollt, und pinnedEdge zeigt einen Schatten, sobald Inhalt darunter gleitet.
Fixierte Kopfzeile
stickyHeader hält den Header in einer höhenbegrenzten Tabelle im Blick und fügt eine feine Linie darunter hinzu, sobald Zeilen darunter scrollen.
Rechts nach links
Ausrichtung, fixierte Spalten und Scroll-Fades folgen der Leserichtung.
| Taste | Aktion |
|---|---|
| Tab | Fokussiert den Scrollbereich, wenn die Tabelle überläuft, danach die Links und Buttons darin. |
| ←→ | Scrollt eine fokussierte, überlaufende Tabelle seitlich. |
| ↑↓ | Scrollt eine fokussierte Tabelle mit Sticky-Header nach oben und unten. |
- Die Teile rendern native Tabellenelemente, sodass Screenreader Zeilen, Spalten und Header ohne zusätzliche Rollen ansagen.
- Markiere die Zelle, die eine Zeile benennt, mit
<TableHead scope="row">, damit jeder Wert mit seiner Zeile und Spalte vorgelesen wird. - Der Scrollbereich gehört nur zur Tab-Reihenfolge, solange er überläuft, sodass Tabellen, die passen, keinen zusätzlichen Stopp erzeugen.
Jeder Teil rendert sein natives Element und akzeptiert dessen Attribute.
| Prop | Typ | Standard |
|---|---|---|
variantsurface fügt einen abgerundeten feinen Rahmen und ein gedämpftes Header-Band hinzu. | "default" | "surface" | "default" |
size | "sm" | "default" | "default" |
wrapLass Zellentext umbrechen und richte Zeilen oben aus. | boolean | false |
scrollFadeBlende die Ränder aus, hinter denen es mehr zu scrollen gibt. Entfällt, wenn Spalten fixiert sind. | boolean | true |
stickyHeaderHalte den Header im Blick. Gib dem Container über containerClassName eine maximale Höhe. | boolean | false |
containerClassNameKlassen für den Scroll-Container. | string | – |
containerRefRef auf den Scroll-Container. | Ref<HTMLDivElement> | – |
| Attribut | Beschreibung |
|---|---|
data-slot="table-frame" | Der äußere Rahmen, mit data-variant, data-size und data-wrap. |
data-slot="table-container" | Der Scroll-Container. |
data-overflowing | Vorhanden am Container, solange sein Inhalt überläuft. Er ist dann fokussierbar. |
data-scrolled-start / data-scrolled-end | Vorhanden, solange Inhalt vor oder nach dem sichtbaren Bereich verborgen ist. |
data-scrolled-top | Vorhanden, sobald eine Tabelle mit Sticky-Header gescrollt wurde. |
--table-bg | Zeilenhintergrund. Folgt einer umgebenden Karte oder einem Popover. |
--table-head-bg | Hintergrund des Header-Bands in der Surface-Variante. |
--table-cell-px / --table-cell-py | Zellen-Padding. Über size gesetzt. |
| Prop | Typ | Standard |
|---|---|---|
scopeNutze row für die Zelle, die eine Zeile benennt. Im Body erhält sie Zellen-Padding und Vordergrundtext. | "col" | "row" | – |
alignend schaltet außerdem auf tabellarische Ziffern um, damit Ziffern fluchten. | "start" | "center" | "end" | "start" |
pinnedHalte die Spalte im Blick, während die Tabelle seitlich scrollt. Setze denselben Wert an ihrem Header und jeder Zelle. | "start" | "end" | – |
pinnedEdgeZeichne einen weichen Schatten am inneren Rand der letzten fixierten Spalte, solange Inhalt dahinter verborgen ist. | boolean | false |
| Attribut | Beschreibung |
|---|---|
data-slot="table-head" | Header-Zellen per CSS ansprechen. |
data-align | Die Ausrichtung. |
data-pinned | Die fixierte Seite. |
| Prop | Typ | Standard |
|---|---|---|
alignend schaltet außerdem auf tabellarische Ziffern um, damit Ziffern fluchten. | "start" | "center" | "end" | "start" |
pinnedHalte die Spalte im Blick, während die Tabelle seitlich scrollt. Setze denselben Wert an ihrem Header und jeder Zelle. | "start" | "end" | – |
pinnedEdgeZeichne einen weichen Schatten am inneren Rand der letzten fixierten Spalte, solange Inhalt dahinter verborgen ist. | boolean | false |
| Attribut | Beschreibung |
|---|---|
data-slot="table-cell" | Zellen per CSS ansprechen. |
data-align | Die Ausrichtung. |
data-pinned | Die fixierte Seite. |
| Attribut | Beschreibung |
|---|---|
data-slot="table-row" | Zeilen per CSS ansprechen. |
data-state="selected" | Setze es, um eine ausgewählte Zeile hervorzuheben. |
| Attribut | Beschreibung |
|---|---|
data-slot="table-header" | Das thead. |
data-slot="table-body" | Das tbody. |
data-slot="table-footer" | Das tfoot, in der Farbe des Header-Bands. |
data-slot="table-caption" | Unter der Tabelle. In der Surface-Variante sitzt sie im Rahmen. |
- AvatarNutzerfotos mit Initialen als Fallback, Statusbadges und gestapelte Gruppen, die zu einer Zahl einklappen.
- BadgeStatuslabels mit farbigen Punkten, entfernbare Tags, die zugleiten, und Zähler, die zu ihrem neuen Wert rollen.
- CardEine Fläche zum Gruppieren von Inhalten, mit drei Varianten, randlosen Medien, konzentrischen Radien und Links über die ganze Karte.
- ChartRecharts-Diagramme mit Theme-Farben, einem Tooltip und einer Legende, die Labels aus einer Konfiguration lesen, und Tastaturnavigation mit sichtbarem Fokusring.
- Data tableEine Tabelle für echte Daten, mit Sortierung, Suche, Zeilenauswahl, fixierten Spalten, Sticky Header und Paginierung.
- ItemEine Zeile aus Medien, Text und Aktionen für Listen, Einstellungen und Auswahlen, mit gruppierter Fläche und einer Hover-Hervorhebung, die zwischen den Zeilen gleitet.
In Blocks verwendet
Blocks, die auf Table aufbauen.