Skip to content

Progress Bar

The Progress Bar component is a linear pill-style indicator that visually represents the completion percentage of a determinate task or ongoing activity in indeterminate mode.

  • Use determinate mode when completion percentage is known (e.g., file uploads, form submission, data saving).
  • Use indeterminate mode when duration is unknown but activity should be shown.
  • Provide feedback for operations expected to take longer than 2 seconds.
  • Pill-style bar (large): rounded ends, colored fill, dotted unfilled track.
  • Pill-style bar (small): rounded ends, colored fill, solid unfilled track.
  • Labels above bar: main label left, percentage label right.
  • For instant operations (less than 1 second); adds unnecessary visual noise.
  • As an interactive element; progress bars are read-only indicators.
  • In place of steppers or tabs for user-navigable multi-step flows.
  • For indeterminate states when a simple spinner is sufficient and no semantic color is needed.

Colors are flexible and may be selected based on the desired semantic emphasis. The following are available options with recommended contexts:

ColorRecommended Context
Red/NavyNeutral, general, or primary progress
GreenPositive, successful, or completion progress
YellowCaution, attention needed, or in-progress warning
Destructive RedProgress tied to potentially irreversible actions
ElementDescription
LabelPercentage text displayed to the right of the bar.
TrackFull background bar; light gray color with dotted pattern or solid light gray on unfilled portion.
FillColored pill-shaped portion that grows to represent progress.
SizeDescriptionVisual Indicators
LargeProminent, higher visibilityThick pill shaped fill, light gray dotted track
SmallCompact, space-efficientThin line fill, light gray solid track
StateDescriptionVisual Indicators
DeterminateKnown progress valueFill grows smoothly to percentage
IndeterminateUnknown durationContinuous flowing or pulsing animation in fill
Complete100% reachedFull fill in selected color
ErrorTask failedFill in appropriate danger color
  • Always display a visible percentage label (e.g., “50%”) to the right of the bar.
  • Round to whole numbers unless higher precision is required.
  • Use locale-aware formatting for numbers and symbols.
  • Do not use vague labels; percentage provides clear, scannable status.
  • Use role="progressbar" with aria-valuemin="0", aria-valuemax="100", and aria-valuenow="[current]" for determinate states.
  • For indeterminate: omit aria-valuenow and ensure animation is visible; optionally add aria-busy="true".
  • Associate the percentage label via aria-labelledby or ensure visible text is sufficient.
  • Maintain ≥4.5:1 contrast for track, fill, and label text against background.
  • Announce significant changes (e.g., completion, error) via aria-live="polite" or "assertive".

Support standard keyboard navigation Progress bars are non-interactive indicators and should not be focusable. No keyboard interaction required.