Use when
- The content shape is predictable.
- Loading is short or bounded enough that the placeholder meaning remains clear.
- Users benefit from knowing where asynchronous content will appear.
Reserve the approximate final content structure with neutral non-interactive placeholders, mark the region busy, then replace the skeleton with loaded content, empty state, or error state on a bounded path.
Users need to know that predictable content is still loading while the layout stays stable and placeholders are not mistaken for real, interactive content.
Content loads asynchronously and has a predictable final shape such as cards, rows, profile blocks, charts, or media tiles.
Reserve the approximate final content structure with neutral non-interactive placeholders, mark the region busy, then replace the skeleton with loaded content, empty state, or error state on a bounded path.
Initial skeleton placeholder state with region marked busy.
Infinite placeholder with no error state.
Mark the loading region busy or provide concise status text.
Inspect whether loading preserves layout without pretending content is available.
Launch the live UI/UX lab when you want to inspect states, keyboard behavior, and common failure modes.
Initial skeleton placeholder state with region marked busy.
Do not place keyboard focus inside placeholder-only controls.
Showing skeletons forever.
IBM Carbon Design System - checked
Carbon distinguishes loading indicators and skeleton states, recommending skeleton states for progressively displayed content.
SAP Fiori - checked
SAP Fiori documents skeleton loading as a screen loading progress indicator and warns against mixed progress indicators.
Nord Design System - checked
Nord documents dynamic-content skeletons, aria-busy regions, and removing busy state after load.
REI Co-op Cedar Design System - checked
Cedar documents skeletons for regions, not specific interactive elements, and reduced-motion behavior.
Last verified: