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

Раскладка

Шапка экрана

Название экрана, его пояснение и главные действия. Одна на экран — ровно как одно <h1>.

Компонент

Прогоны

Каждая область прокручивается сама: боковая навигация не уезжает, пока читают таблицу.

Разметка
<div class="inst-page-header">
  <div class="inst-page-header-main">
    <h1 class="inst-page-title">Прогоны</h1>
    <p class="inst-page-desc">Каждая область прокручивается сама: боковая навигация
      не уезжает, пока читают таблицу.</p>
  </div>
  <div class="inst-page-actions">
    <button class="inst-btn inst-btn--sm" type="button">Фильтры</button>
    <button class="inst-btn inst-btn--sm inst-btn--primary" type="button">Запустить</button>
  </div>
</div>

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

<div class="inst-page-header">
  <div class="inst-page-header-main">
    <h1 class="inst-page-title">Прогон #4127</h1>
    <p class="inst-page-desc">…</p>
  </div>
  <div class="inst-page-actions">…</div>
</div>

Обёртка inst-page-header-main обязательна: она держит название и пояснение одной колонкой с зазором --space-2 и несёт flex: 1 1 20rem — порог, ниже которого действия переносятся под заголовок, а не сжимают его в столбик из одного слова.

min-inline-size: 0 на ней — не украшение: без него длинное название без пробелов растягивает всю шапку и выталкивает действия за край.

Что Почему
<h1> под inst-page-title Класс даёт кегль, а не уровень. Уровень — работа тега, и скринридер читает именно его
inst-page-header-main как обёртка Без неё название и пояснение становятся отдельными детьми ряда и встают в строку
type="button" у действий Иначе внутри формы они её отправят

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

Используйте Возьмите другое
Название экрана и его главные действия Заголовок блока внутри экранасекция: она тише и не претендует на <h1>
Пояснение, что это за экран, — одно-два предложения Заголовок области приложенияinst-panel-title, панель
Место для 1–3 действий над экраном целиком Инструменты над содержимым панелитулбар
Путь до экранакрошки в шапке оболочки, а не здесь

Устройство

inst-page-actions прижимается к дальнему краю (margin-inline-start: auto) и переносится внутри себя. Держите здесь одно primary: экран, где всё primary, не имеет primary вовсе — см. кнопку.

Четвёртое и следующие действия уходят в меню. Полоса из шести кнопок над экраном не читается ни глазом, ни с клавиатуры.

Композиции

Пример

Прогон #4127 идёт

worldgen · начат 14:02

Разметка
<div class="inst-page-header">
  <div class="inst-page-header-main">
    <h1 class="inst-page-title">Прогон #4127
      <span class="inst-badge" data-tone="running"><span class="inst-dot"></span>идёт</span></h1>
    <p class="inst-page-desc">worldgen · начат 14:02</p>
  </div>
  <div class="inst-page-actions">
    <button class="inst-btn inst-btn--sm inst-btn--danger" type="button">Остановить</button>
  </div>
</div>

Правила

Так Одно название экрана

<h1> на экран. Шапка отвечает на «где я», а не перечисляет разделы.

Не так Шапка экрана внутри блока

Заголовок блока тише и не претендует на <h1> — это секция.

Так Один-три действия

Главное действие экрана и его ближайшие соседи. Больше — значит, часть из них принадлежит содержимому, а не экрану.

Не так Инструменты содержимого в шапке экрана

Режимы и фильтры над данными панели живут в тулбаре.

Доступность

Уровень заголовка <h1> один на документ. Кит его не назначает — ставит автор разметки
Мера пояснения 68ch. Строка длиннее теряется на возврате к началу
Перенос Шапка переносится сама; при увеличении кегля до 200% действия уходят под заголовок, а не за край экрана
Контраст Пояснение — --text-secondary (4.5:1). --text-faint для текста, который читают, не применяется
Печать Название и пояснение печатаются, inst-page-actions — нет: действия на бумаге не действия
Порядок Действия стоят в разметке после заголовка и обходятся после него. order не применяется

API

ИмяЗначениеЧто делает
класс
inst-page-headerКонтейнер. Ряд с переносом, выравнивание по верху
inst-page-header-mainКолонка «название + пояснение». Порог переноса 20rem
inst-page-titleНазвание экрана. Кегль --text-xl
inst-page-descПояснение. --text-sm, --text-secondary, мера 68ch
inst-page-actionsДействия. Прижаты к дальнему краю, переносятся
токен
--gap-inlinevar(--space-4)
--pad-panelvar(--space-5)
--space-24px
--space-36px
--text-xl1.3125rem
--text-sm0.8125rem
--text-secondarylight-dark(var(--n-9), var(--n-5))

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