On this page
Proposed CSC Standards · 0.1.0
Step indicators
Progress through a known sequence.
Show which step is current in a multi-step process.
What this describes
- 1Details
- 2Requirements
- 3Review
- 4Submit
- 1Details
- 2Requirements
- 3Review
- 4Submit
- 1Details
- 2Requirements
- 3Review
- 4Submit
- 1Details
- 2Requirements
- 3Review
- 4Submit
When to use
- A form or workflow with ordered steps.
- The person benefits from seeing earlier and later steps.
When not to use
- Unordered filters. Use Tabs.
- A single form page.
Allowed variants
Horizontal
A short sequence on a wide page.
- Hierarchy
- Left to right.
- Use in
- Desktop wizards.
- Restriction
- Labels stay visible.
- Accessibility
- Current step is text.
- Responsive
- Switch to vertical before overflow.
Vertical
Narrow screens and long labels.
- Hierarchy
- Stacked.
- Use in
- Under 760px.
- Restriction
- Still show every label.
- Accessibility
- Same current state.
- Responsive
- This is the narrow layout.
Compact
A tight header.
- Hierarchy
- Shorter.
- Use in
- When the form title needs the width.
- Restriction
- Do not drop the current label.
- Accessibility
- Current step remains text.
- Responsive
- Use only if it fits at 320px.
Mandatory rules
Name the current step in text
The current step has a visible label and a programmatic current state.
Implementation detail
A numbered circle without a label is not enough. WCAG 1.4.1 also applies if color marks the current step.
Show the step label in text and mark the current step in the accessibility tree.
Check: The current step can be identified without color.
Use the vertical variant when the horizontal trail would overflow
Horizontal is for wide screens. Vertical and compact are for narrow ones.
Implementation detail
Proposed CSC Standard. Four horizontal labels overflow at 320px.
Stack the steps vertically under 760px.
Check: At 375px the steps stack and the page does not scroll sideways.
Do not skip a step that still has errors
Forward navigation is blocked while the current step is invalid, and the errors are listed.
Implementation detail
WCAG 3.3.1. Letting the person skip ahead hides the error.
Validate the current step before changing current.
Applies when: The stepper is part of ApplicationWizard or another validated flow.
Check: An empty required field on step 1 prevents moving to step 2 and shows text.
Restrictions
- STP-003 Do not skip a step that still has errors. The stepper is part of ApplicationWizard or another validated flow.
Accessibility
- Current step is text.
- Errors block progress and are written out.
Responsive behavior
- Vertical under 760px.
- Do not horizontally scroll the step trail.
Component states
Complete
Earlier steps are marked done with text or an icon plus text.
- 1Details
- 2Requirements
- 3Review
- 4Submit
Current
One step is current.
- 1Details
- 2Requirements
- 3Review
- 4Submit
Upcoming
Later steps are visible but not described as done.
- 1Details
- 2Requirements
- 3Review
- 4Submit
Correct implementation
The current step is named in text. The circle uses #2A338F.
Imports: None. Dependencies: None. Rules: STP-001, STP-002.
export function ApplicationSteps() {
return (
<ol>
<li>Details</li>
<li aria-current="step"><span style={{ background: '#2A338F', color: '#fff', borderRadius: '50%', display: 'inline-grid', width: 26, height: 26, placeItems: 'center' }}>2</span> Review</li>
</ol>
);
}Incorrect implementation
No incorrect example is published for this component.
Common mistakes
- Number-only steps.
- A horizontal trail that overflows.
- Allowing Next while the step is invalid.
Testing checklist
Agent prompts for this component are in the AI Development Hub.