Доступность
Семантику задаёт Bits UI или нативный HTML. Компоненты добавляют видимый фокус, доступные имена и достаточную область нажатия. Контраст и движение проверяются отдельно.
Статус stable. В каноне с 2026-07.
Фокус
- Обязательно: Показывать кольцо через
:focus-visibleу каждого интерактивного элемента. - Запрещено: Убирать
outlineбез равноценной контрастной замены. - Обязательно: Сохранять порядок фокуса равным порядку DOM; не менять
tabindexради раскладки. - Обязательно: Новая панель не должна полностью закрывать сфокусированный контрол. Если закрывает, перенести фокус в новый контекст.
Имена и роли
- Обязательно: Связывать видимую подпись поля с контролом через
for/id; placeholder не заменяет label. - Обязательно: Давать
aria-labelконтролу только с иконкой. - Обязательно: Связывать ошибку с полем через
aria-invalidиaria-describedby. - Запрещено: Писать вручную роли и состояния, которые уже поддерживает примитив Bits UI.
Область цели
- Обязательно: Держать указательную цель не меньше 24×24 CSS px. Видимый знак может быть меньше внутри достаточной области или вдали от соседних целей.
Цвет и контраст
- Запрещено: Передавать смысл только цветом; статус дополняется иконкой или словом.
- Обязательно: Держать контраст обычного текста не ниже 4.5:1. Для значимых иконок, границ контролов и индикаторов состояния минимум составляет 3:1 относительно соседнего цвета.
- Обязательно: Использовать семантические токены статуса и проверять объявленные пары каждого публичного скина в среде, где компонент реально показывается.
Движение
- Обязательно: При
prefers-reduced-motionотключать служебное движение. Смысл состояния должен остаться понятным.
Клавиатурная карта
Общий минимум поверх покомпонентных карт; специальное поведение задаёт примитив.
| Клавиши | Действие |
|---|---|
| Tab / Shift+Tab | Переход между интерактивными элементами по порядку DOM |
| Enter | Активирует кнопку, ссылку или отправку формы |
| Space | Активирует кнопку, переключает checkbox и switch |
| Esc | Закрывает раскрытое меню, диалог или popover |
| ↑ ↓ | Движение по списку опций или разделам accordion |
| Home / End | Переход к первому или последнему пункту списка |