Theme studio

Design a theme, preview it live, then export it. Saved in this browser.

Quick picks #10b981
Generated scale
50100200300400500600700800900
Some text is below AA

Skeleton

  • Stable
  • WCAG 2.2 evidence
  • RTL

Placeholder shown while content loads. It is decorative: hidden from assistive technology (aria-hidden) and without text, so screen readers hear nothing from it (WCAG 1.1.1, 1.3.1). The bones pulse only when motion is allowed (motion-safe:, WCAG 2.3.3); with reduced motion they stay still. It takes the size of its container and is replaced by the real content when it arrives. Presentational: renders in React Server Components. Consumer duty (WCAG 4.1.3): a skeleton cannot say that something is loading. Mark the region that is loading with aria-busy="true" while the skeleton is shown and remove it when the content arrives, and announce the loading or the result in a status region (SpinnerLabel, LiveRegion) where people need to know. Use Spinner for an action whose result has an unknown shape.

import { Skeleton } from "@nexera-ui/react";
Loading example…
4
examples
1
props
0
live controls
1
platform
5
WCAG criteria
3
blocks use it

Try every prop. Copy the code.

Change the props and the code updates. Check light and dark, LTR and RTL, and phone width.

Loading…
Generated code
import { Skeleton } from "@nexera-ui/react";

<Skeleton />

Examples 3

The same examples as Storybook, rendered live. Open Code to copy one.

Narrow container

Narrow container: the skeleton scales with it (no fixed widths), so nothing scrolls at 320 px.

Loading example…

Loading region

The consumer's part of the pattern: the region that is loading carries aria-busy, and the skeleton is swapped for the content when it arrives. The skeleton itself is hidden from assistive technology. Pulsing stops with reduced motion.

Loading example…

Right to left

Right-to-left: rows mirror (circle on the right), the bones keep their proportions.

Loading example…

Props 1

1 props shown

typeNexera
"text" | "avatar-row" | "card" | "table-row"

What the skeleton stands in for: text is a paragraph of four lines, avatar-row a person with two lines, card a picture with a title and two lines inside a bordered card, table-row a row of a table with a circle and three cells. Figma sizes: 380, 380, 300 and 560 px wide; here it fills its container, so set the width (or a max-w-*) with className where the content it replaces has one.

Default text

* Required. React Aria props shown are the ones most apps use; the component accepts the rest of its React Aria props too.

Accessible by default.

Built on React Aria, and covered by the WCAG 2.2 evidence generated on every build.

WCAG 2.2 evidence

3 direct · 2 supporting
  • 1.1.1Non-text ContentLevel A · tested directly
  • 1.3.1Info and RelationshipsLevel A · tested directly
  • 1.4.10ReflowLevel AA · supporting test
  • 2.3.3Animation from InteractionsLevel AAA · supporting test
  • 4.1.2Name, Role, ValueLevel A · tested directly

Fits any width.

Nexera components respond to the space they are given. Drag the corner of the frame, or pick a width.

0 px · drag the corner

Styling hooks

Pass className to add Tailwind classes (merged last). State is exposed as data attributes, so you can style it with variants like data-pressed:.

Usage
<Skeleton className="shadow-sm" />

Used in blocks

Related components