Перейти к содержимому
Плотность
Тема

Навигация

Шаги мастера

Последовательность этапов процесса с отметкой, где он сейчас. Состояние несёт слово под подписью — цвета полосы мало.

Компонент
  1. Источникготово
  2. Правилаготово
  3. Проверкасейчас
  4. Запускдальше
Разметка
<ol class="inst-stepper">
  <li class="inst-stepper-item" data-state="done">
    <span class="inst-stepper-name">Источник</span><span class="inst-stepper-note">готово</span></li>
  <li class="inst-stepper-item" data-state="done">
    <span class="inst-stepper-name">Правила</span><span class="inst-stepper-note">готово</span></li>
  <li class="inst-stepper-item" data-state="current">
    <span class="inst-stepper-name">Проверка</span><span class="inst-stepper-note">сейчас</span></li>
  <li class="inst-stepper-item" data-state="todo">
    <span class="inst-stepper-name">Запуск</span><span class="inst-stepper-note">дальше</span></li>
</ol>

Использование

<ol class="inst-stepper">
  <li class="inst-stepper-item" data-state="current">
    <span class="inst-stepper-name">Проверка</span>
    <span class="inst-stepper-note">сейчас</span>
  </li>
</ol>
Что Обязательно Почему
<ol> с <li> да Шаги упорядочены, и порядок — весь смысл компонента
data-state на каждом шаге, включая todo да Отсутствие атрибута неотличимо от опечатки в нём
inst-stepper-note со словом состояния да Цвет полосы не имеет права быть единственным носителем

Когда использовать

Используйте Возьмите другое
Процесс с известным заранее числом этапов, который ведёт человек Работа машины с раскрывающимся теломшаг прогона: у него есть вывод, а здесь только подпись
Форма, разбитая на экраны Свободный переход между видамивкладки: у шагов есть порядок и незавершённость
Ход выполнения, у которого этапы названы Доля выполненного числоммера: полоса без имён этапов
История событий с временемлента

Устройство

Подпись состояния

inst-stepper-note — не украшение и не подзаголовок. Это второй носитель состояния: «готово», «сейчас», «дальше» читаются и на распечатке, и тем, кто не различает оттенок полосы. Строка с датой или счётчиком в этом слоте состояние не сообщает и его не заменяет.

Раскладка

Полоса переносится сама: у элемента flex: 1 1 10rem, и на узком экране шаги встают в несколько рядов без единого медиазапроса. Полоса состояния — это ::before шириной во весь элемент, поэтому она не расходится с подписью при любом числе шагов.

Состояния

data-state — фаза жизни, словарь у компонента свой и закрытый:

Пример
  1. Пройденготово
  2. Текущийсейчас
  3. Предстоящийдальше
Разметка
<ol class="inst-stepper">
  <li class="inst-stepper-item" data-state="done">
    <span class="inst-stepper-name">Пройден</span><span class="inst-stepper-note">готово</span></li>
  <li class="inst-stepper-item" data-state="current">
    <span class="inst-stepper-name">Текущий</span><span class="inst-stepper-note">сейчас</span></li>
  <li class="inst-stepper-item" data-state="todo">
    <span class="inst-stepper-name">Предстоящий</span><span class="inst-stepper-note">дальше</span></li>
</ol>
Значение Значит Что рисует
todo Ещё не начат. База Полоса --track, подпись --text-secondary
current Идёт сейчас Полоса --accent-mark, подпись --text-primary и --weight-medium
done Завершён Полоса --accent-mark, подпись --text-secondary

Базовое значение todo пишется в разметке, хотя правил под него нет: data-state="todo" читается, а его отсутствие — нет, и опечатка выглядела бы как база.

Пройденный и текущий шаг делят один цвет полосы намеренно: различает их inst-stepper-note — «готово» против «сейчас» — и начертание подписи. Второго акцентного тона в ките нет.

Правила

Так Слово состояния в каждом шаге

«готово», «сейчас», «дальше». Оно читается на распечатке и тем, кто не различает оттенок полосы.

Не так Дата вместо слова состояния

inst-stepper-note — носитель состояния, а не слот для произвольной подписи. Дата состояния не сообщает.

Так data-state="todo" явно

Отсутствие атрибута неотличимо от опечатки в нём. База пишется в разметке.

Не так Шаги вместо вкладок

У шагов есть порядок и незавершённость. Свободный переход между видами — это вкладки.

Доступность

Порядок <ol> сообщает номер шага и их общее число без подписей вида «3 из 5»
Цвет не единственный носитель Состояние ходит словом (inst-stepper-note) и полосой
Контраст Название — --text-secondary (4.5:1), слово состояния — --text-muted; это данные, а не декорация, и --text-faint им не положен
Полоса --accent-mark держит 3:1 против дорожки --track — это метка, а не текст
Кегль Слово состояния — --text-xs, ниже 11px кит не опускается
Печать Шаги печатаются: слово состояния читается на бумаге, где полоса могла бы слиться

API

ИмяЗначениеЧто делает
класс
inst-stepperСписок шагов. Ставится на <ol>
inst-stepper-itemШаг. Носитель data-state
inst-stepper-nameНазвание шага
inst-stepper-noteСлово состояния под названием
атрибут
data-statetodo current done. Закрыт, база — todo
токен
--gap-inlinevar(--space-4)
--space-24px
--space-48px
--text-sm0.8125rem
--text-xs0.75rem
--weight-medium500
--size-marker2px
--radius-full999px
--tracklight-dark(oklch(0 0 0 / 0.10), oklch(1 0 0 / 0.16))
--accent-marklight-dark(var(--a-4), var(--a-3))
--text-primarylight-dark(var(--n-12), var(--n-1))
--text-secondarylight-dark(var(--n-9), var(--n-5))
--text-mutedlight-dark(var(--n-8), var(--n-6))

Почему кит устроен именно так — конституция · Открытый код под MIT, github.com/keshon/instrument