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.
The full lab is intentionally loaded on request. That keeps this reading page fast while preserving the strong and weak states, keyboard checks, and failure scenarios.
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.
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.
Source trail checked: