Loading

Skeletons for perceived performance

Skeletons mirror the eventual layout so users perceive progress while data resolves. Ideal for React suspense boundaries and Next.js streaming routes that fetch in parallel.

Examples

Button-shaped skeleton for toolbar placeholders.


Skeleton variants examples

Surface tone, block height, and corner radius. Each code view starts with Variant: for clarity.


Appearance: default | Size: md | Rounded: md | Animation: shimmer | Shimmer Tone: default


Appearance: subtle | Size: md | Rounded: md | Animation: shimmer | Shimmer Tone: subtle


Appearance: muted | Size: md | Rounded: md | Animation: shimmer | Shimmer Tone: muted


Appearance: sky | Size: md | Rounded: md | Animation: shimmer | Shimmer Tone: sky


Appearance: rose | Size: md | Rounded: md | Animation: shimmer | Shimmer Tone: rose


Appearance: purple | Size: md | Rounded: md | Animation: shimmer | Shimmer Tone: purple


Appearance: pink | Size: md | Rounded: md | Animation: shimmer | Shimmer Tone: pink


Appearance: orange | Size: md | Rounded: md | Animation: shimmer | Shimmer Tone: orange


Appearance: yellow | Size: md | Rounded: md | Animation: shimmer | Shimmer Tone: yellow


Appearance: teal | Size: md | Rounded: md | Animation: shimmer | Shimmer Tone: teal


Appearance: indigo | Size: md | Rounded: md | Animation: shimmer | Shimmer Tone: indigo


Appearance: emerald | Size: md | Rounded: md | Animation: shimmer | Shimmer Tone: emerald


Appearance: gray | Size: md | Rounded: md | Animation: shimmer | Shimmer Tone: gray


Appearance: gradient-blue | Size: md | Rounded: md | Animation: shimmer | Shimmer Tone: gradient-blue


Appearance: gradient-green | Size: md | Rounded: md | Animation: shimmer | Shimmer Tone: gradient-green


Appearance: gradient-red | Size: md | Rounded: md | Animation: shimmer | Shimmer Tone: gradient-red


Appearance: gradient-yellow | Size: md | Rounded: md | Animation: shimmer | Shimmer Tone: gradient-yellow


Appearance: gradient-purple | Size: md | Rounded: md | Animation: shimmer | Shimmer Tone: gradient-purple


Appearance: gradient-teal | Size: md | Rounded: md | Animation: shimmer | Shimmer Tone: gradient-teal


Appearance: gradient-indigo | Size: md | Rounded: md | Animation: shimmer | Shimmer Tone: gradient-indigo


Appearance: gradient-pink | Size: md | Rounded: md | Animation: shimmer | Shimmer Tone: gradient-pink


Appearance: gradient-orange | Size: md | Rounded: md | Animation: shimmer | Shimmer Tone: gradient-orange


Appearance: default | Size: md | Rounded: md | Animation: pulse | Shimmer Tone: default


Appearance: default | Size: sm | Rounded: md | Animation: none | Shimmer Tone: default


Appearance: default | Size: md | Rounded: md | Animation: none | Shimmer Tone: default


Appearance: default | Size: lg | Rounded: md | Animation: none | Shimmer Tone: default


Appearance: subtle | Size: md | Rounded: none | Animation: none | Shimmer Tone: default


Appearance: subtle | Size: md | Rounded: sm | Animation: none | Shimmer Tone: default


Appearance: subtle | Size: md | Rounded: md | Animation: none | Shimmer Tone: default


Appearance: subtle | Size: md | Rounded: lg | Animation: none | Shimmer Tone: default


Appearance: subtle | Size: md | Rounded: full | Animation: none | Shimmer Tone: default

What it does

Match skeleton geometry to real content to minimize CLS.

Fade to content rather than hard swapping when possible.

Composition and API

Prefer compound subcomponents instead of one oversized prop bag. Export a small, documented API for your design system.

Do not use skeletons indefinitely—surface errors after timeouts.

Common use cases

  • Dashboard cards awaiting metrics.
  • Table rows while server components resolve.
  • Profile headers before avatars load.
  • Feed items during pagination fetches.

Accessibility

Keyboard order, focus rings, and ARIA attributes should match production usage. Test with your supported browsers and assistive technologies when semantics are non-trivial.

This preview page exposes a single h1 in the hero for a clean outline.

Next.js integration notes

Colocate examples under the App Router, keep server and client boundaries explicit, and avoid pulling interactive overlays into unexpected server layouts.

Set NEXT_PUBLIC_SITE_URL so canonical and Open Graph URLs resolve on deploy.

FAQ

Does the Skeleton component work with Next.js App Router?

Yes. Import it like any other React component; keep interactive subtrees in client components when you need hooks or browser APIs, and leave static structure in server components where possible.

Can I customize skeleton with Tailwind CSS?

Zentauri UI exposes class-friendly variants and slots so you can extend styles with Tailwind utilities without fighting inline styles.

Is this Skeleton implementation accessible by default?

Primitives follow sensible defaults, but accessibility depends on how you label controls, manage focus, and wire keyboard handlers in your app. Validate critical flows with keyboard-only use and screen readers.