Block
Steps
A numbered process, such as how to get started, in three to five steps.
2 layoutsOne structure; add one layout modifier to pick the arrangement.
Row layout
ca-steps--row: Steps side by side in as many columns as fit. For short steps on a wide page.
From lesson to licence
An ordered list; the numbers come from a CSS counter.
From first lesson to licence
-
Book a trial lesson
Pick a time that suits you; we pick you up at home.
-
Pass the theory exam
Practise online between lessons, at your own pace.
-
Take your driving test
Your instructor books it once you are ready.
<section class="ca-steps ca-steps--row w-full" aria-labelledby="steps-row-title">
<div class="ca-steps__header">
<h2 class="ca-steps__title" id="steps-row-title">From first lesson to licence</h2>
</div>
<ol class="ca-steps__list">
<li class="ca-steps__item">
<span class="ca-steps__number" aria-hidden="true"></span>
<h3 class="ca-steps__item-title">Book a trial lesson</h3>
<p class="ca-steps__item-text">Pick a time that suits you; we pick you up at home.</p>
</li>
<li class="ca-steps__item">
<span class="ca-steps__number" aria-hidden="true"></span>
<h3 class="ca-steps__item-title">Pass the theory exam</h3>
<p class="ca-steps__item-text">Practise online between lessons, at your own pace.</p>
</li>
<li class="ca-steps__item">
<span class="ca-steps__number" aria-hidden="true"></span>
<h3 class="ca-steps__item-title">Take your driving test</h3>
<p class="ca-steps__item-text">Your instructor books it once you are ready.</p>
</li>
</ol>
</section>Column layout
ca-steps--column: One step per row, the number beside the text. For longer steps or a narrow column.
From lesson to licence, in a column
The same markup; only the layout class differs.
From first lesson to licence
-
Book a trial lesson
Pick a time that suits you; we pick you up at home.
-
Pass the theory exam
Practise online between lessons, at your own pace.
-
Take your driving test
Your instructor books it once you are ready.
<section class="ca-steps ca-steps--column w-full" aria-labelledby="steps-column-title">
<div class="ca-steps__header">
<h2 class="ca-steps__title" id="steps-column-title">From first lesson to licence</h2>
</div>
<ol class="ca-steps__list">
<li class="ca-steps__item">
<span class="ca-steps__number" aria-hidden="true"></span>
<h3 class="ca-steps__item-title">Book a trial lesson</h3>
<p class="ca-steps__item-text">Pick a time that suits you; we pick you up at home.</p>
</li>
<li class="ca-steps__item">
<span class="ca-steps__number" aria-hidden="true"></span>
<h3 class="ca-steps__item-title">Pass the theory exam</h3>
<p class="ca-steps__item-text">Practise online between lessons, at your own pace.</p>
</li>
<li class="ca-steps__item">
<span class="ca-steps__number" aria-hidden="true"></span>
<h3 class="ca-steps__item-title">Take your driving test</h3>
<p class="ca-steps__item-text">Your instructor books it once you are ready.</p>
</li>
</ol>
</section>Guidance and accessibility
When to use
- Use steps when order matters, such as getting started or how a service works.
- Keep it to three to five steps, each starting with a verb.
Accessibility
- The steps are an ordered list, so screen readers announce “1 of 3”. The
visible number is drawn by CSS and hidden with
aria-hidden="true", so it is not read twice.
Classes
Generated from the block contract. Layouts are part of the core, so every skin gets all of them.
| Class | Kind | Use it for |
|---|---|---|
ca-steps | Block | Section with the header and the list of steps. Add one layout. |
ca-steps__header | Part | Optional title and lead above the steps. |
ca-steps__title | Part | Heading of the block. |
ca-steps__lead | Part | One or two sentences below the title. |
ca-steps__list | Part | The <ol> of steps; it numbers them. |
ca-steps__item | Part | One step. |
ca-steps__number | Part | Shows the step number; leave it empty. |
ca-steps__item-title | Part | What happens in the step, as a heading. |
ca-steps__item-text | Part | One line of detail. |
ca-steps--row | Layout | Steps side by side. |
ca-steps--column | Layout | One step per row, number beside. |
Skins
The same markup, dressed by each skin. The arrangement stays; spacing, type and color change.
Base skin
Neutral grayscale starting point; product skins extend it and change what differs.
From first lesson to licence
-
Book a trial lesson
Pick a time that suits you; we pick you up at home.
-
Pass the theory exam
Practise online between lessons, at your own pace.
-
Take your driving test
Your instructor books it once you are ready.
Calaca skin
The Calaca UI brand: hueso paper and tinta ink, cempasúchil marigold, rosa and jade.
From first lesson to licence
-
Book a trial lesson
Pick a time that suits you; we pick you up at home.
-
Pass the theory exam
Practise online between lessons, at your own pace.
-
Take your driving test
Your instructor books it once you are ready.
Proof skin
Pilot skin pushed far from base: square, heavy, offset shadows, larger targets.
From first lesson to licence
-
Book a trial lesson
Pick a time that suits you; we pick you up at home.
-
Pass the theory exam
Practise online between lessons, at your own pace.
-
Take your driving test
Your instructor books it once you are ready.
Crossview skin
The CrossView proofing table: cool ground, bond-paper sheets, rule-grey hairlines, one red mark.
From first lesson to licence
-
Book a trial lesson
Pick a time that suits you; we pick you up at home.
-
Pass the theory exam
Practise online between lessons, at your own pace.
-
Take your driving test
Your instructor books it once you are ready.
Framework notes
Link the prebuilt stylesheet of your skin next to your brand theme. No build step.
<link rel="stylesheet" href="theme.css" />
<link rel="stylesheet" href="ca-base.css" />In Astro, Vite and other Tailwind projects, import Calaca after Tailwind and your theme in your main stylesheet.
@import "tailwindcss";
@import "./theme.css";
@import "@calaca/ui/core.css";
@import "@calaca/ui/skins/base.css";Same stylesheet as above; write the classes in className.
<button className="ca-button ca-button--primary ca-button--md" type="button">Save changes</button>