Loading
Skeletons, spinners, progress and optimistic updates — chosen by how long people will wait and how much you know.
Waiting feels shorter when people can see that something is happening and roughly what will appear. Choose the indicator by how long the wait is and how much you know about it.
The skeleton matches the final layout exactly, so nothing shifts when data arrives.
Choosing an indicator
Skeletons
- Match the final layout exactly — same heights, same rhythm — so nothing shifts when content arrives.
- Mark the loading region with
aria-busy="true"; skeletons themselves arearia-hidden. - The shimmer stops with reduced motion; the placeholder shape remains.
Buttons
Actions that take time show their own progress with Button loading: the label is replaced by a spinner without the button changing width, activation is blocked, and focus stays put.
Optimistic updates
When an action almost always succeeds — starring, archiving, reordering — update the interface immediately and reconcile in the background. If it fails, roll back and say so with a toast. Pair destructive optimistic actions with undo rather than confirmation; see Destructive actions.