ProgressBar
A ProgressBar is a simple chart that can be used to show how complete something is, or visualize parts that make up a whole.
Page navigation navigation
If the ProgressBar
value is already shown as text adjacent to the ProgressBar
, don't use a redundant label for the ProgressBar
.

Accessibility and usability expectations
Vision
- When rendering multiple segments, ensure each segment has a 3:1 contrast ratio against adjacent segments and the background
- Do not rely on color alone to convey progress. Include text labels or other indicators for users who cannot perceive color differences
- If a visible label is provided, ensure the text meets the minimum contrast requirement of 4.5:1 for readability
Adaptability
- If the progress value is already displayed as adjacent text, the label should remain legible when resized up to 200%
- When zoomed to 400% or viewed at a width of 320px, content and functionality must remain fully available without horizontal scrolling
- The visual design should remain visible and usable in Windows High Contrast/Forced colors mode
Interaction
Keyboard
- The
ProgressBar
itself does not receive keyboard focus because it is a passive status indicator
Engineering for compatibility with assistive technology
Screen reader support
ProgressBar
are inherently visual elements. Provide a text description of progress for assistive technologies (e.g., “Tasks: 8 of 10 complete” for a single segment, or “Tasks: 80 done, 14 in progress, 6 open” for multiple segments)- The
ProgressBar
must communicate the current value. Avoid: Using<progress>
without accessible attributes such asaria-valuenow
andaria-labelledby
- If the progress value is already displayed as adjacent text, avoid duplicating it with additional labels or ARIA attributes, as this can create redundant screen reader output
- A
ProgressBar
must include a programmatically associated text alternative that describes the current state to ensure assistive technology users receive equivalent information
Speech recognition
- The
ProgressBar
should have an accessible name that matches or includes the visible label, though this may not be necessary since it is not interactive
Built-in accessibility features
- By default, the component renders with
role="progressbar"
, making it inherently recognizable by assistive technologies - The component provides an accessible name via
aria-label
- The component's state information is exposed through
aria-valuenow
,aria-valuemin
, andaria-valuemax
Implementation requirements
- If custom colors are used, ensure a minimum contrast ratio of 3:1 between adjacent segments and the background
- This contrast requirement extends to multiple segments within the
ProgressBar
- Ensure that legends or accompanying labels do not rely solely on color to convey meaning
How to test the component
Integration tests
- Verify the accessible name is correctly exposed
- Ensure the value updates dynamically as progress changes
- Confirm that the
ProgressBar
provides a visual indicator that meets color contrast requirements - If custom colors are used, verify that each segment meets the minimum color contrast ratio of 3:1 against the background and adjacent segments
- Ensure the component reflows correctly when zoomed or resized
Component tests
- Verify that the component renders with
role="progressbar"
and the correct ARIA attributes:aria-valuenow
,aria-valuemin
, andaria-valuemax
- Ensure that the
ProgressBar
does not receive keyboard focus since it is a non-interactive status indicator