Stepper
Steppers let users nudge a numeric value by a fixed step, typically for small ranges where free-form typing would feel heavy.
Ready to use
The Stepper is a multi-step form header featuring progress navigation and a back action. It visually communicates a user’s position within a linear, multi-step process, so users understand how many steps remain, which step is currently active, and which have already been completed. The component is designed to stay sticky at the top of the viewport as users progress through a flow, providing constant orientation across mobile, tablet, and desktop.
Anatomy
Section titled “Anatomy”- Back button
- Title
- Step indicator
- Connector line
- Step label
When to use it
Section titled “When to use it”Use the Stepper when:
- A process is too complex for a single view — for instance, more than 5–6 fields that need logical grouping.
- The flow is a high-value transaction (checkout, insurance, legal form) where the user needs constant reassurance of their progress.
- The journey is linear and the user must be guided through a specific sequence.
Avoid the Stepper when:
- The task can be completed in a single page view.
- The process is non-linear and users need to jump back and forth between sections.
- The flow has fewer than two steps.
- The component would sit inside an overlay or modal where space is limited — it makes the UI feel packed.
Properties
Section titled “Properties”State
Two visual modes: Rested for the standard top-of-page placement, and Scroll which adds an elevation drop shadow once the user scrolls past the header. The Scroll mode keeps the stepper anchored to the top of the viewport without losing its visual separation from the content beneath.
Device adaptation
The same component reshapes per breakpoint. Mobile shows only the current step’s label; tablet and desktop expose every label. The title and indicator scale up at desktop sizes to match the broader layout.
Step indicator
Each step renders as a circle that takes the Incomplete, Current, or Completed state. Completed steps fill and show a check; current steps use a heavier border; incomplete steps stay outlined and quiet.
Back button
A boolean that controls whether the back action appears. Default true from step 2 onward — keep it as the first focusable element so keyboard users return to the previous step without scanning past the progress.
Platform considerations
Section titled “Platform considerations”Desktop
The full step list is visible. Titles use the larger Title/Desktop/7 size and labels sit beneath each indicator.
Tablet
All step labels are visible. The title shrinks one step to Title/Desktop/8 so the header keeps its rhythm at narrower widths.
Mobile
Only the current step’s label is shown to keep labels readable for longer translations. All other indicators stay visible without their labels so users still see the journey shape.
Best practices
Section titled “Best practices”The stepper carries trust — keep it predictable and never lose user data inside it.
Do
Use it when a process needs more than 5–6 grouped fields, lean on it for high-value transactions where the user benefits from constant orientation, build it for linear journeys where the sequence matters, persist entered data on Back (never clear a form field during a Back action), and keep the header sticky with its scroll-state shadow for constant orientation.
Don't
Don’t use the stepper for single-page tasks, don’t use it for non-linear flows where users jump between sections, don’t use it for journeys with fewer than two steps, and don’t place it inside overlays or modals where space is limited.
Content guidelines
Section titled “Content guidelines”The title sits at the top of every step, so write it as a short, identifying phrase (“Your details”, “Payment”, “Review”) rather than a sentence. Step labels should be one or two words and stay parallel across the journey so the progression reads coherently. Reinforce each indicator with a screen-reader-only “Step N of M: label” so assistive tech announces position alongside the visible glyph. Keep wording stable between Rested and Scroll states — the same words should read the same way whether the user has scrolled or not.
Styles
Section titled “Styles”<div class="tng-stepper"> <div class="tng-stepper-step">1</div> <div class="tng-stepper-divider"></div> <div class="tng-stepper-step">2</div></div>Elements
Section titled “Elements”States
Section titled “States”<button class="tng-stepper-step is-completed"> <span class="sr-only">1</span> <i class="tng-icon icon-check" aria-label="Completed"></i></button><button class="tng-stepper-step is-active">2</button><button class="tng-stepper-step">3</button><button class="tng-stepper-step is-active"> <span>1</span> <p class="tng-stepper-step-label">Step Title</p></button>Divider
Section titled “Divider”States
Section titled “States”<div class="tng-stepper-divider"></div><div class="tng-stepper-divider is-completed"></div>Module
Section titled “Module”<div class="tng-stepper"> <button class="tng-stepper-step is-completed"> <span class="sr-only">1</span> <i class="tng-icon icon-check" aria-label="Completed"></i> <p class="tng-stepper-step-label"> <span class="tng-overflow-multiline-ellipsis"> Step Title 1 </span> </p> </button> <div class="tng-stepper-divider"></div> <button class="tng-stepper-step is-active"> <span>2</span> <p class="tng-stepper-step-label"> <span class="tng-overflow-multiline-ellipsis"> Dealer, Time & Date </span> </p> </button> <div class="tng-stepper-divider"></div> <button class="tng-stepper-step"> <span>3</span> <p class="tng-stepper-step-label"> <span class="tng-overflow-multiline-ellipsis"> Step Title 3 </span> </p> </button> <div class="tng-stepper-divider"></div> <button class="tng-stepper-step"> <span>4</span> <p class="tng-stepper-step-label"> <span class="tng-overflow-multiline-ellipsis"> Step Title 4 </span> </p> </button></div>Accessibility
Section titled “Accessibility”For Design
Section titled “For Design”- All states (current, rested, filled) must maintain accessible contrast.
- Focus styles must remain visible and meet WCAG AA contrast requirements. Focus should be clearly distinguishable from hover.
- Colour tokens used should be semantic (e.g. foreground/neutral/default) rather than fixed values, ensuring the component adapts correctly to different themes or surfaces.
- Maintain a minimum 4.5:1 contrast ratio for step indicators and ensure text remains legible at 200% zoom.
For Dev
Section titled “For Dev”To ensure the Stepper meets WCAG 2.1 AA and supports assistive technologies, follow these implementation standards:
- Interactive Target
- Group the circle and label as a single button or link. The user should only Tab once per step.
- Semantic Labeling
- Use
aria-labelledbyto associate the step number with the label text, or use a singlearia-labelon the container.
- Use
- State Indicator
- Use
aria-current="step"on the active step so screen reader users know exactly which part of the process they are in (e.g. “Step 1 out of 4: [Label]”).
- Use
- Back Button Assistance
- If a user navigates back, previously entered data must be persisted. Never clear a form field during a “Back” action.
- Focus Flow
- The user focuses on the “Step” and the next press of Tab moves focus directly into the first interactive element of that step’s content.
- When a step is active, the next focus stop in the tab sequence must be the content area associated with that step.
- Make sure the Back Button is the first focusable element when moving to step 2.
- Navigate forward with Tab and backwards with Shift+Tab.
Do
Use it when a process requires more than 5–6 fields that should be logically grouped, for high-value transactions such as checkouts, insurance applications, or legal forms where the user needs constant reassurance of their progress, and for linear journeys where the sequence of information matters and the user must be guided through a specific path.
Don't
Don’t use it for single-page tasks where the user can complete the entire action in one view, for non-linear processes where the user needs to jump back and forth between sections in any order (a sequential form header would be misleading), for short flows with fewer than 2 steps, or in overlays and modals where space is limited — it can make the UI feel too packed.
Responsive Behaviour
Section titled “Responsive Behaviour”On mobile breakpoints, only the label for the current step is displayed to keep labels readable for longer words; labels for other steps are hidden. On tablet and desktop breakpoints, all step labels are visible.