Skip to content

Progress

<progress class="progress" value="60" max="100" aria-label="Upload progress"></progress>

A bar without a number is hard to read precisely. Put the number beside it.

60%

Leave value off and the element is indeterminate — the bar sweeps instead of filling.

The sweep stops under prefers-reduced-motion.

Set dir="rtl" on the page or on any subtree — the bar fills from the other end. See the button page for a live example.

  • Name it. aria-label, or a <label for> pointing at it.
  • A progress bar is not a spinner. Use it when you know the proportion, and a spinner when you do not.
  • Do not announce every percent. The element updates its own value; wrapping it in an assertive live region turns a quiet bar into a stream of interruptions.