Skeleton
Platzhalter, die 150 ms warten, bevor sie erscheinen, exakt die Größe des umschlossenen Inhalts annehmen und ihn einblenden, ohne etwas zu verschieben.
pnpm dlx shadcn@latest add https://hextaui.com/r/skeleton.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 cn tw-animate-cssKopiere den folgenden Code und füge ihn in dein Projekt ein.
components/ui/skeleton.tsx Passe die Importpfade an dein Projekt-Setup an.
Shimmer und Pulse nutzen zwei Animationen aus deinem Theme. Füge sie einmal zu deiner globalen CSS-Datei hinzu.
Nutze ein Skeleton allein als dimensionierten Platzhalter oder übergib loading und umschließe den echten Inhalt, damit der Platzhalter dessen exakte Größe annimmt.
Formen
Für sich ist ein Skeleton ein leerer Block. Gib ihm per Klassen Größe und Radius passend zu dem, wofür es steht.
Animationen
animation wählt einen streichenden shimmer, einen weichen pulse oder none.
Text
<SkeletonText /> zeichnet einen Balken pro Zeile und folgt Schriftgröße und Zeilenhöhe des Elternelements, sodass es denselben Platz füllt wie der Text, den es ersetzt. Die letzte Zeile ist kürzer.
Echten Inhalt umschließen
Mit loading rendert das Skeleton den echten Inhalt unsichtbar darunter, sodass es die exakte Größe annimmt und sich nichts verschiebt, wenn die Daten eintreffen. Wird loading false, blendet der Inhalt ein.
Inline
Übergib render={<span />}, um ein Skeleton in einen Satz zu setzen. Es sitzt auf der Textgrundlinie.
Schnelles Laden
Ein Skeleton bleibt in den ersten 150ms unsichtbar und blendet dann ein. Daten, die früher eintreffen, lassen nie einen Platzhalter aufblitzen.
Viele Zeilen
Skeletons, die zusammen gemountet werden, starten ihre Animation zusammen, sodass eine lange Liste wie ein Ladebereich wirkt.
Rechts nach links
In einem rechts-nach-links-Layout streicht der Shimmer von rechts nach links.
- Ein einzelnes Skeleton ist Dekoration und vor assistiver Technik verborgen, ebenso
<SkeletonText />. - Ein Skeleton, das Inhalt umschließt, setzt beim Laden
aria-busy. Der Inhalt darunter ist vor assistiver Technik verborgen und nicht fokussierbar, bis er geladen ist. - Skeletons sagen nichts an. Wenn Leute wissen müssen, was lädt, füge ein sichtbares Label oder eine Statusmeldung hinzu.
- Bei aktivierter reduzierter Bewegung erscheinen Skeletons sofort ohne Shimmer, Pulse oder Fade.
Akzeptiert alle Attribute des Elements, das es rendert.
| Prop | Typ | Standard |
|---|---|---|
animation | "shimmer" | "pulse" | "none" | "shimmer" |
loadingWenn gesetzt, umschließt das Skeleton seine Kinder: true zeigt den Platzhalter, false den Inhalt. Lass es für einen eigenständigen Platzhalter weg. | boolean | – |
render | ReactElement | (props, state) => ReactElement | <div> |
| Attribut | Beschreibung |
|---|---|
data-slot="skeleton" | Skeletons per CSS ansprechen. |
data-animation | Die verwendete Animation. Entfernt, sobald umschlossener Inhalt geladen ist. |
data-loading | "true" oder "false", wenn das Skeleton Inhalt umschließt. |
data-slot="skeleton-content" | Umschließt den echten Inhalt. Unsichtbar und inert, solange geladen wird. |
--skeleton-dir | 1 oder -1 in rechts-nach-links-Layouts. Legt die Richtung des Shimmers fest. |
Akzeptiert alle <div>-Attribute.
| Prop | Typ | Standard |
|---|---|---|
linesAbgerundet und zwischen 1 und 50 gehalten. | number | 3 |
animation | "shimmer" | "pulse" | "none" | "shimmer" |
| Attribut | Beschreibung |
|---|---|
data-slot="skeleton-text" | Der Container für die Zeilen. |
- AlertInline-Meldungen für Status und Feedback, mit neutraler Fläche, farbigem Icon und einem Schließen, das sanft zusammenklappt.
- EmptyEin Platzhalter für Ansichten, in denen es noch nichts zu zeigen gibt, mit Icon, Nachricht und der nächsten Aktion.
- ProgressEin Balken oder Ring, der zeigt, wie weit eine Aufgabe fortgeschritten ist, sanft zwischen Aktualisierungen wechselt und gleitet, solange die Gesamtmenge unbekannt ist.
- SpinnerEin Ladeindikator mit Ticks im Apple-Stil oder einem atmenden Ring, der vor dem Anzeigen warten und lange genug sichtbar bleiben kann, um nicht zu flackern.
- ToastKurze Nachrichten, die sich sauber stapeln, bei Hover aufklappen, weggewischt werden können und einen Ladezustand an Ort und Stelle in Erfolg oder Fehler verwandeln.
- Aspect ratioEine Box, die ihre Form behält, bevor Medien geladen sind, beim Laden schimmert, das Medium einblendet und bei einem Fehler auf einen Fallback zurückfällt.
In Blocks verwendet
Blocks, die auf Skeleton aufbauen.
- API keysDie API-Schlüssel-Seite eines KI-Produkts, wie in den Konsolen von OpenAI und Anthropic. Schlüssel mit eingeschränkten Berechtigungen und Ablaufdatum erstellen, das Secret einmal sehen mit einem Kopieren, das sich bestätigt, mit Rückgängig widerrufen, direkt umbenennen, mit Übergangsfrist rotieren und die Nutzung pro Schlüssel sehen.
- ArtifactDas Panel neben einem KI-Chat, das zeigt, was das Modell erzeugt hat. Webseiten, SVGs, Dokumente und Code streamen live ein und wechseln dann zu einer Sandbox-Vorschau, mit Versionen zum Vergleichen und Wiederherstellen, einem anpassbaren Split und einem Bottom Sheet auf Smartphones.
- BillingPlan & Nutzung für ein KI-Produkt, im Stil von Cursor, Claude und Vercel. Eine nach Modell aufgeteilte Nutzungsanzeige, die das Ende des Zyklus hochrechnet und warnt, bevor die Credits ausgehen, ein tägliches Diagramm zum Scrubben, ein Ausgabenlimit mit Warnungen, die du auf der Anzeige in der Vorschau siehst, Planwechsel mit exakter Anteilsberechnung, ein Kartenformular mit echter Validierung und Rechnungen als PDF-Download.
- SecuritySitzungen und Sicherheit für ein KI-Produkt. Aktive Geräte mit Abmelden, bei dem Zeilen animiert verschwinden, eine Passwortänderung mit Live-Stärkeanzeige, Zwei-Faktor-Einrichtung mit echtem QR-Code, einer 6-stelligen Prüfung und herunterladbaren Wiederherstellungscodes, Passkeys über WebAuthn und Kontolöschung hinter einer getippten Bestätigung.