Loading states

Progress indicators, like loading UX, help assure users that the system has understood their input and that progress is being made by giving appropriate feedback on users’ actions.

Loading animations

Looped animation

Actions that take <10 seconds

Showing an animated graphic on loop offers feedback that the system is working


Looped animations are used for fast actions - make processes feel more instant


We don’t recommend looped animation for actions that take longer than 10 seconds, because users quickly grow impatient if they feel like they aren’t making progress

Percentage done

Actions that take 10+ seconds

Use for actions that take 10 seconds or more


A visual indicator that progresses towards completion puts the user at ease and increases their willingness to wait

Skeleton states

Skeleton screens help users focus on their tasks by providing a distraction-free view while they wait for content to load. This state helps users visualize how the page will look when it finishes loading and it provides feedback when there is activity going on in the background.






Users may perceive loading times as shorter in duration when shown a skeleton screen than when shown a spinner or a blank screen, even when the waiting period is the same.

Skeleton animations

They’re usually designed in greyscale in a way that replicates the actual layout of the page without being distracting


Usually, these animations are subtle; such as a shimmer that moves from left to right, impersonating how users would read the content

Lazy loading

If expected load times are exceedingly long, it might even be worth considering lazy loading instead — the practice of only displaying what’s necessary on the page, while the rest of the content loads in the background.

Inline loading

Loading buttons

A loading indicator can be integrated into a button or actionable icon


The looped animation is generally used to indicate an action isn’t available or the system is loading