Переключение между связанными панелями контента. Три размера (SM/MD/LG), горизонтальная и вертикальная ориентация, иконки, бейджи. Реализует ARIA tablist pattern с клавиатурной навигацией стрелками и roving tabindex.
Размеры
SM 32px · MD 40px · LG 48px
Размер
Пример
SM — 32px
MD — 40px
LG — 48px
Размер
padding-x
gap
height
stroke
Описание
SM
8px
4px
32px
1.5
Компактный список вкладок
MD
10px
6px
40px
2
Стандартный размер по умолчанию
LG
12px
8px
48px
2
Увеличенный — заголовки страниц
Состояния
Default · Hover · Active · Disabled
Левый столбец показывает одну вкладку крупным планом, а не ряд. Ряда без выбранной вкладки не бывает:
одна выбрана всегда (решение владельца 2026-09-07), и компонент это выдерживает сам — при пустом активном значении
он выбирает первую невыключенную. Правый столбец — тот же случай, собранный из компонента целиком.
Hover: подпись цвет НЕ меняет (остаётся text-tertiary), реакцию несёт полоска stroke-mid снизу. Фона у вкладки в наведении нет. Выбранная под курсором не меняется вовсе
Disabled
—
text-disabled, pointer-events: none, не участвует в keyboard nav
ID связей генерируются через useId() — корректны при SSR
Клавиатура
Навигация
Tab — вход в tablist на активную вкладку
← / → — предыдущая / следующая (горизонтально)
↑ / ↓ — предыдущая / следующая (вертикально)
Home / End — первая / последняя вкладка
Disabled-вкладки пропускаются при навигации стрелками
APCA Lc
Контраст и размер
Touch target: SM ≥ 32px, MD ≥ 40px, LG ≥ 48px по высоте
Активная вкладка: text-primary на page-bg — APCA Lc 101 / 106 / 105 / 87 (Light · Dark · Light Invert · Dark Invert), порог 60 пройден везде
Неактивная: text-tertiary на page-bg — APCA Lc 70 / 59 / 79 / 65. Применимый порог здесь 45 (подпись элемента управления), и он пройден с запасом во всех четырёх темах
Индикатор stroke-high: не только цвет — размер 2px
Disabled: не интерактивный, отдельного порога контраста нет
Focus Ring
Фокус
Box-shadow 2px, цвет --ds-focus-ring-color (#6C8DFA)
Offset 1px — виден на любом фоне
Roving tabindex: только активная вкладка tabIndex=0
При смене стрелкой — автофокус на новой вкладке
Скрывается при клике мышью (:focus-visible)
Работа с клавиатурой
Tab · ← → · ↑ ↓ · Home End
Клавиша
Действие
Tab
Вход в tablist (на активную вкладку). Повторный Tab — выход из tablist в следующий контрол или содержимое панели.
Предыдущая / следующая вкладка в вертикальном tablist. Цикличная навигация.
Home
Первая доступная (не disabled) вкладка.
End
Последняя доступная (не disabled) вкладка.
Правила использования
Когда · Чего избегать
Правила
Когда использовать Tabs
Контент разделён на 2–8 логически связанных раздела
Пользователь переключается без потери контекста страницы
Все разделы равнозначны — нет явного «главного»
Детали сущности: обзор / история / документы / аналитика
Горизонтальные — при широком контейнере (≥ 400px)
Вертикальные — для боковых панелей навигации
Типичные ошибки
Чего избегать
Больше 8 вкладок — используйте боковую навигацию или Select
Вложенные tabs-in-tabs — резко усложняют навигацию
Пошаговый wizard в вкладках — для этого используйте Steps
Одна вкладка — просто показывайте контент без обёртки
Tabs как фильтр больших данных — используйте ToggleGroup
Разделы с сильно разным объёмом — вызывают скачки высоты
Слишком много вкладок
Переполнение
Сожмите окно — при нехватке места появляется кнопка ⋯ · prop buttonMore
Когда вкладки не влезают по ширине контейнера, скрытые вкладки собираются под кнопкой Ghost ⋯. По клику открывается дропдаун со списком. Поведением управляет prop buttonMore (по умолчанию true): при false кнопка ⋯ не показывается, а лишние вкладки уходят в горизонтальный скролл.
State Explorer
Интерактивный тест состояний — переключай и смотри