Progress components are non-interactive elements that visually indicate the progress of a task or function.

Also known as: Progress indicator, progress bar, loading indicator, progress ring, spinner, loader, progress loader, activity indicator, ProgressView(iOS), ProgressBar(Android).

Anatomy

An example linear progress indicator featuring callout A indicating the progress indicator, 'Filename.jpg' featuring callout B indicating the label, and '15%' featuring callout C indicating the completion status.

A. Progress indicator (required): Animated fill indicating the function is in progress.
B. Label (optional): Label indicating what’s in progress, such as a file name.
C. Status (optional): Label indicating how much process has been completed for determinate indicators.

Usage

When to use and when not to use different types of progress
Component When to use
Linear progressWhen space is limited.
Circular progressWhen the design has sufficient space.
Progress gaugeFor a more detailed progress indicator, such as in dashboards or control panels.

Note: Progress gauges are only available as determinate indicators. Learn more below.

Best practices

  • Avoid using progress components for very lengthy load times, as users may perceive that the app is slow or frozen.
  • Only use determinate progress indicators if the exact amount of completion is known. Learn more below.
Progress bar with inline message to show the status

Do

Use inline messages as needed to help indicate what’s in progress

Progress bar used to show user progression

Don't

Use the progress component to display user progression in a workflow. Use a Wizard instead.

Progress bar shown on load

Do Display the progress component as soon as the operation starts if the task takes more than two seconds to complete.

Progress bar shown for more than 5 seconds

Don't Make indeterminate processes take longer than 5 seconds. Please reference performance requirements.

Progress bar shown as the page content loads

Do Display content as it loads or load it in the background as much as possible so that it won't impact users.

Progress component shown applied to each section of the page

Don't Apply the progress component to individual content loading.

Determinate progress

Determinate progress indicators display how long a process will take. They include an exact percentage or fraction indicating how much progress has been made.

Determinate progress indicators showing how long the process will take
  • Only use determinate indicators when the amount of completion is known, as estimating can be misleading or cause frustration.

Indeterminate progress

Indeterminate progress indicators display unknown wait times. Indeterminate progress indicators may turn into determinate progress when more information is available.

Indeterminate progress indicators showing an unknown wait time
  • Use indeterminate indicators when the amount of progress is unknown or not important.

Placement

In general, progress indicators should be placed near the function they represent. o show that an entire page or app is loading, place a linear indicator at the top of the page or just below the navigation bar.

Progress bar shown anchored to horizontal navigation bar
  • Consider using skeleton loading to further indicate that loading is in progress.

Content

  • Use plain language without abbreviations or jargon.
  • Annotate the percentage completed in determinate progress components.