Skelett
Ein pulsierender Platzhalterblock für Karten, Avatare und Tabellen, während die Daten geladen werden – mit dem neobrutalistischen Stil mit dicken Rahmen.
import { Skeleton } from "@/components/ui/skeleton"
export function SkeletonDemo() {Das Skeleton ist ein pulsierender Platzhalter, der die Form eines UI-Elements hält, während dessen Daten laden. Es ist ein einzelnes div – kein Primitive darunter – mit animate-pulse, gedämpftem Hintergrund und dem dicken Rahmen des neobrutalistischen Rezepts.
Typische Anwendungsfälle:
- Karten und Listen – das endgültige Layout spiegeln, damit Inhalte ohne Sprung erscheinen.
- Avatare und Medien – den Kreis oder die Thumbnail-Box reservieren, bevor das Bild eintrifft.
- Tabellen und Formulare – Zeilen und Felder während eines langsamen Fetches an Ort und Stelle halten.
Installation#
pnpm dlx shadcn@latest add https://neobrutalism.com/r/base/skeleton.jsonnpx shadcn@latest add https://neobrutalism.com/r/base/skeleton.jsonyarn dlx shadcn@latest add https://neobrutalism.com/r/base/skeleton.jsonbunx --bun shadcn@latest add https://neobrutalism.com/r/base/skeleton.json
Kopiere den folgenden Code und füge ihn in dein Projekt ein.
import { cn } from "@/lib/utils"
function Skeleton({ className, ...props }: React.ComponentProps<"div">) {
return (
<div
data-slot="skeleton"
className={cn("animate-pulse rounded border-2 bg-muted", className)}
{...props}
/>
)
}
export { Skeleton }
Passe die Importpfade an dein Projekt-Setup an.
Verwendung#
import { Skeleton } from "@/components/ui/skeleton"<Skeleton className="h-[20px] w-[100px] rounded-full" />Beispiele#
Avatar#
import { Skeleton } from "@/components/ui/skeleton"
export function SkeletonAvatar() {Karte#
import { Card, CardContent, CardHeader } from "@/components/ui/card"
import { Skeleton } from "@/components/ui/skeleton"
Text#
import { Skeleton } from "@/components/ui/skeleton"
export function SkeletonText() {Formular#
import { Skeleton } from "@/components/ui/skeleton"
export function SkeletonForm() {Tabelle#
import { Skeleton } from "@/components/ui/skeleton"
export function SkeletonTable() {RTL#
Um RTL-Unterstützung in Neobrutalism zu aktivieren, siehe die RTL-Konfigurationsanleitung.
"use client"
import * as React from "react"Barrierefreiheit#
Skeletons sind dekorativ – verbirg sie mit aria-hidden="true" vor assistiven Technologien, damit Screenreader keine leeren, pulsierenden Boxen vorlesen. Den Ladezustand selbst kommunizierst du separat: Setze aria-busy="true" auf die Region, die gerade lädt, oder aktualisiere eine visuell versteckte Live-Region („Ergebnisse werden geladen …“), die geleert wird, sobald der Inhalt eintrifft. Sobald der echte Inhalt rendert, entferne die Skeletons vollständig aus dem DOM.