Card
Eine Fläche zum Gruppieren von Inhalten, mit drei Varianten, randlosen Medien, konzentrischen Radien und Links über die ganze Karte.
pnpm dlx shadcn@latest add https://hextaui.com/r/card.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/card.tsx Passe die Importpfade an dein Projekt-Setup an.
Varianten
default sitzt auf einem haarfeinen Ring mit weichem Schatten, outline entfernt Füllung und Schatten, und muted verwendet eine gefüllte Fläche für ruhigere Bereiche.
Größen
size="sm" strafft Abstand, Radius und Titelgröße gemeinsam, sodass eine kompakte Karte weiterhin zur selben Familie gehört. size="flush" entfernt den Innenabstand für eigene Layouts wie Listen und einklappbare Zeilen, die ihr eigenes Padding mitbringen.
Media
Ein Bild, Video, Picture oder Seitenverhältnis, das als Erstes oder Letztes steht, läuft randlos. Die Karte entfernt das Padding auf dieser Seite und beschneidet das Media an ihren Ecken.
Klickbare Karte
Setze einen <CardLink /> in den Titel, um die ganze Karte zu einem Link zu machen. Buttons und andere Bedienelemente darin bleiben klickbar und behalten ihren eigenen Fokus, wie der Stern hier.
Klickbare Varianten
Jede Variante erhält ihr eigenes Hover-Feedback, sobald sie einen Link enthält, und der Fokusring umschließt die ganze Karte, wenn der Link per Tastatur fokussiert wird.
Rahmen
Füge border-b zum Header oder border-t zum Footer hinzu, und die Karte ergänzt passendes Padding auf der Innenseite.
Verschachtelt
Eine Karte in CardContent leitet ihren Radius vom Radius des Elternelements abzüglich des Abstands ab, sodass die Ecken konzentrisch bleiben.
Langer Inhalt
Titel ohne Umbruchstellen, lange URLs, Emoji und CJK-Text werden in einer schmalen Karte umgebrochen, statt sie breiter zu drücken.
Semantik
Jeder Teil nimmt eine render-Prop, sodass eine Karte ein <article> mit echter Überschrift, Header und Footer sein kann.
Rechts nach links
Die Aktion wandert an den Inline-Start, und der Footer folgt der Leserichtung.
Eine Karte ist für sich nicht fokussierbar. Diese Tasten gelten, wenn sie einen <CardLink /> enthält.
| Taste | Aktion |
|---|---|
| Tab | Fokussiert den Karten-Link, der den Fokusring um die ganze Karte zeichnet, und wandert dann zu jedem Bedienelement darin. |
| Enter | Folgt dem Karten-Link. |
- Der zugängliche Name des Links ist sein eigener Text, belasse
<CardLink />daher im Titel, statt die ganze Karte in einen Anker zu packen. - Bedienelemente in einer klickbaren Karte liegen über der Trefferfläche des Links, sodass sie per Zeiger und Tastatur erreichbar bleiben.
- Nutze
renderauf<CardTitle />, um dem Titel die Überschriftenebene zu geben, die zu deiner Seite passt.
Jeder Teil rendert standardmäßig ein <div>, akzeptiert dessen Attribute und nimmt eine render-Prop zum Austauschen des Elements.
| Prop | Typ | Standard |
|---|---|---|
variant | "default" | "outline" | "muted" | "default" |
sizeSkaliert Abstand, Radius und Titelgröße gemeinsam. | "default" | "sm" | "flush" | "default" |
render | ReactElement | (props, state) => ReactElement | <div> |
| Attribut | Beschreibung |
|---|---|
data-slot="card" | Die Card in CSS ansprechen. |
data-variant | Die aktuelle Variante. |
data-size | Die aktuelle Größe. |
data-link | Vorhanden, solange die Karte einen CardLink enthält. |
--card-spacing | Innenabstand, den jeder Teil teilt. Wird von size gesetzt. |
--card-radius | Eckenradius. Verschachtelte Karten leiten ihren vom Elternelement ab. |
--card-title-size | Schriftgröße, die CardTitle verwendet. |
| Prop | Typ | Standard |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <div> |
| Attribut | Beschreibung |
|---|---|
data-slot="card-header" | Ein Raster, das CardAction in die obere Endecke setzt. |
| Prop | Typ | Standard |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <div> |
| Attribut | Beschreibung |
|---|---|
data-slot="card-title" | Den Titel ansprechen. |
| Prop | Typ | Standard |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <div> |
| Attribut | Beschreibung |
|---|---|
data-slot="card-description" | Die Beschreibung ansprechen. |
| Prop | Typ | Standard |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <div> |
| Attribut | Beschreibung |
|---|---|
data-slot="card-action" | Erstreckt sich über die Titel- und Beschreibungszeilen, über der Trefferfläche eines CardLink. |
| Prop | Typ | Standard |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <div> |
| Attribut | Beschreibung |
|---|---|
data-slot="card-content" | Gibt Radius und Abstand der Karte an verschachtelte Karten weiter. |
| Prop | Typ | Standard |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <div> |
| Attribut | Beschreibung |
|---|---|
data-slot="card-footer" | Den Footer ansprechen. |
| Prop | Typ | Standard |
|---|---|---|
href | string | – |
renderÜbergib hier die Link-Komponente deines Routers. | ReactElement | (props, state) => ReactElement | <a> |
| Attribut | Beschreibung |
|---|---|
data-slot="card-link" | Dehnt seine Trefferfläche über die ganze Karte. |
- 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.
- 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.
- KbdTastenkappen für Tastenkürzel, die auf jeder Plattform die richtigen Symbole zeigen, korrekt vorgelesen werden und sich wie echte Tasten eindrücken.
In Blocks verwendet
Blocks, die auf Card aufbauen.
- Code BlockCodeblöcke für KI-Antworten. Syntaxhervorhebung, die mit dem Streaming Schritt hält, Kopieren, Herunterladen und Umbrechen, Zeilennummern und hervorgehobene Zeilen, Diffs mit Annehmen und Ablehnen sowie ein Terminal für Befehle.
- Diff ReviewPrüfe die Änderungen eines Agenten über mehrere Dateien, bevor sie übernommen werden. Ein Dateibaum mit Zählern, jede Änderung, jede Datei oder alles annehmen oder ablehnen, Kommentare zu jeder Zeile oder jedem Bereich, die an den Agenten zurückgehen, Unified- und Split-Ansicht, Hervorhebung auf Wortebene, Rückgängig, streamende Änderungen und eine Zusammenfassung „4 Dateien bearbeitet“ für den Chat.
- Tool CallsZeige, was ein Agent tut, eine Zeile pro Schritt. Lesen und Suchen werden zu einer kurzen Zusammenfassung gefaltet, während Änderungen, Befehle, Freigaben und Fehler sichtbar bleiben. Jeder Schritt öffnet sich zu einer echten Ansicht: der Datei, dem Diff, dem Terminal oder den Ergebnissen. Jeder Tool-Zustand des AI SDK ist abgedeckt, einschließlich Freigaben mit der Möglichkeit, stattdessen eine Begründung anzugeben.