Skeleton
Placeholder block for content that hasn't arrived. It has no size of its own — you shape it with utilities.
Props
| Prop | Values | Default | Description |
|---|---|---|---|
className | string | "" | This is how you size it. |
All other <div> attributes are forwarded.
Common patterns
<Skeleton className="h-4 w-32" />
<Skeleton className="size-10 rounded-full" />
// Mirror the shape of what's loading
<div className="space-y-2">
<Skeleton className="h-3.5 w-2/3" />
<Skeleton className="h-3.5 w-full" />
</div>Notes
The component is aria-hidden, so screen readers skip it entirely. Announce
loading state separately — usually aria-busy on the region that is filling
in, or a live region that says what arrived once it has.
Skeletons work when they match the shape of the real content. A single grey box where a three-line paragraph will appear reads as a broken layout rather than as loading.
The pulse comes from Tailwind's animate-pulse, which respects the reduced
motion media query if your stylesheet includes the usual guard — this site's
does.