Services Grid
A three-column grid of services, each an icon, a title and a line of copy.
6 个框架初级
A numbered step flow with a connector rail running between the markers.
<!--
An <ol>, because the order is the whole point - these steps happen in sequence
and a screen reader gets that from the element, not from the numbers drawn in
the circles. Those numbers are aria-hidden precisely because the list already
announces "1 of 4"; leaving them audible would say "one one Kickoff".
The connector is drawn with ::before on each step and is pure decoration.
-->
<section class="svc-proc" aria-labelledby="svc-proc-title">
<p class="svc-proc__kicker">How it runs</p>
<h2 class="svc-proc__title" id="svc-proc-title">Four steps, three weeks</h2>
<ol class="svc-proc__steps">
<li class="svc-proc__step">
<span class="svc-proc__marker" aria-hidden="true">1</span>
<div class="svc-proc__body">
<h3 class="svc-proc__step-title">Kickoff</h3>
<p class="svc-proc__step-copy">Half a day with your team to agree the question we are answering.</p>
</div>
</li>
<li class="svc-proc__step">
<span class="svc-proc__marker" aria-hidden="true">2</span>
<div class="svc-proc__body">
<h3 class="svc-proc__step-title">Research</h3>
<p class="svc-proc__step-copy">Interviews, analytics and a read of the code you already have.</p>
</div>
</li>
<li class="svc-proc__step">
<span class="svc-proc__marker" aria-hidden="true">3</span>
<div class="svc-proc__body">
<h3 class="svc-proc__step-title">Prototype</h3>
<p class="svc-proc__step-copy">A clickable core journey, tested with five people outside your building.</p>
</div>
</li>
<li class="svc-proc__step">
<span class="svc-proc__marker" aria-hidden="true">4</span>
<div class="svc-proc__body">
<h3 class="svc-proc__step-title">Handover</h3>
<p class="svc-proc__step-copy">A costed backlog and a recommendation you can act on the same week.</p>
</div>
</li>
</ol>
</section>| Prop | 类型 | 默认值 | 说明 |
|---|---|---|---|
kicker | string | - | 显示在标题上方的小标签。 |
title必填 | string | - | 卡片的标题文本。 |
steps必填 | ProcessStep[] | - | 流程的有序步骤。 |
className | string | - | 合并到根元素上的额外类名。 |
An `<ol>`, because the sequence is the content - a screen reader gets "1 of 4" from the element, not from the numbers drawn in the circles. Those numbers are `aria-hidden` for exactly that reason: leave them audible and it reads "one one Kickoff". They are derived from the index too, so renumbering is impossible to get wrong. The connector is a `::before` on the step itself rather than an element between steps, so it cannot desynchronise from the list, and `last:before:hidden` stops the final marker trailing a rule into nothing.