Progress
Progress shows that work is under way and how far it has come. Use the bar when you know the size of the work, and the spinner for a short wait inside the button or row that started it.
Example
When to use it
Use the bar for work of a known size, such as importing candidates or uploading a folder of passports. Show it where the work started, and let one bar cover every step, so it only moves forward.
Use the spinner for a short wait inside the button or row that started it, such as sending an offer. A page or a panel that is loading shows its skeleton instead.
Anatomy
The bar sits between a label row and a status row. The label names the work, with the percentage on its right. The status row says what is happening and gives the counts.
The spinner is an open circle in the ink of the button or row that holds it.
- Bar height
- 4 px
- Bar corners
- Fully round
- --radius-full
- Track
- The fill of a control
- --surface-control
- Fill
- Brand blue
- --brand-blue
- Label
- Caption, 12 px, medium
- --type-product-caption
- Value and status
- Caption small, 11 px, tabular digits
- --type-product-caption-small
- Space between rows
- 6 px
- Fill moves over
- 500 ms
- --ease-standard
- Spinner in a control or row
- 16 px
- Spinner in a panel or list footer
- 20 px
- Spinner speed
- One turn per second
When the size is unknown
When work starts before its size is known, a third of the track pulses at its start, blue in the middle and fading at both ends, and the status says in words what is happening. Once the size is known, the fill takes its true value and moves forward from there. The bar does not turn into a spinner, or back.
Behavior
A button is busy the moment you press it, so the work cannot start twice. Its spinner appears after 300 ms, so a quick save does not flicker.
When stopping loses nothing, offer Cancel on the label row. When stopping would lose work already done, ask before you stop.
When the bar has not moved for 10 seconds, the status row says in words what the work is waiting for.
When work fails, the fill stays where it stopped and the status row says in red what went wrong and what to do: “12 passports did not upload. Try again.”
With reduced motion the bar steps to each value, the spinner fades in and out, and an unknown size shows the track and the words alone.
Content
Name the work with a verb ending in ing and its object: Importing candidates, Uploading passport.pdf. Leave out the ellipsis. The moving bar already says the work goes on.
Give numbers the reader can check, such as 1,240 of 3,000 candidates, and show a percentage only beside them. Leave out time estimates unless the work runs at a steady pace.
Accessibility
The bar is a progress bar named by its label, with a value from 0 to 100. While the size is unknown it has no value, so a screen reader does not announce zero percent.
The bar does not announce each change. The end of the work is announced once, by the toast or the notification that reports it.
The spinner is hidden from screen readers. The button that holds it is marked busy and keeps its name.
Permitted and not permitted
Permitted
Importing candidates, 1,240 of 3,000
Numbers the reader can check.
Not permitted
Loading
Names neither the work nor how much is left.
A spinner over the whole page
A skeleton shows what is coming and leaves the rest of the page usable.
A bar that starts again at each step
When a bar moves backward, readers stop trusting it.