Dot Stepper

A row of dots that shows how many steps there are and which one you are on, with buttons to go back and forward. For short, linear sequences like onboarding.

Preview

Steps

Welcome aboard

A short tour of the four things you will use every day.

Step 1 of 5

When to use

  • For three to seven steps that are read in order: an onboarding tour, a carousel of tips, a short setup.
  • When the position matters more than the names of the steps.

Reach for something else

  • For a form where each step has a name people need to see: use a labelled stepper.
  • For many pages of results: that is Pagination.

Anatomy

  1. 1

    Previous button

    Goes back one step; disabled on the first.

  2. 2

    Dots

    One per step. The active dot stretches into a short pill in brand ink.

  3. 3

    Next button

    Goes forward one step; on the last step it becomes the finishing action, such as Done.

  4. 4

    Step label

    Optional text such as Step 2 of 5, for when the dots alone are too quiet.

States

First step

Previous is disabled.

Middle step

Both buttons active; the active dot elongates.

Last step

Next becomes the finishing action.

Dot hover

Where dots are clickable, the dot under the pointer darkens.

Focus

A ring around the focused button or dot.

Accessibility

  • Previous and Next are native <button> elements with clear labels, and disabled at the ends.
  • Clickable dots are buttons with an aria-label such as "Go to step 3"; the active one carries aria-current="step".
  • A visually hidden live region announces "Step 2 of 5" when the step changes.
  • Decorative, non-clickable dots are aria-hidden, and the step label carries the position instead.

Source

The Dot Stepper is in the Figma library today, with every variant and state above. Its React and Vue source ships with the code library, free, and this page gets the install line, the props and the code the day it does.

Tell me when the source landsand you'll get 10% off your first licence if you ever want the full library.

See it in a block

All documentation