Tabs
Компонент для организации контента в виде вкладок. Позволяет пользователю переключаться между разными разделами информации в одном пространстве.
Режимы отображения
Задаётся свойством mode:
default— стандартное отображение вкладок;accent— акцентный вариант, выделяет активную вкладку;secondary— более сдержанный стиль для второстепенных разделов.
Распределение вкладок
Задаётся свойством layoutFillMode:
auto— автоматическое распределение (по умолчанию):- равномерно занимают всю ширину при использовании внутри
HorizontalScroll; - равномерное распределение в режиме
defaultна всех платформах кроме VKCOM.
- равномерно занимают всю ширину при использовании внутри
stretched— вкладки растягиваются на всю доступную ширину;shrinked— вкладки сжимаются по размеру контента.
Прокрутка к активной вкладке
По умолчанию автоматическая прокрутка к выбранной вкладке отключёна. Для включения:
withScrollToSelectedTab— включает прокрутку к активной вкладке;scrollBehaviorToSelectedTab— контролирует горизонтальное выравнивание при прокрутке (соответствует параметрам scrollIntoView ↗).
Особенности прокрутки
- Вертикальная прокрутка автоматически отключается, если вкладка находится вне видимой области по вертикали.
- В браузерах без поддержки параметров
scrollIntoViewпрокрутка будет отключёна.
Способы управления активной вкладкой
Использование selected у TabsItem
Управлять активной вкладкой можно вручную задавая selected у необходимой вкладки:
<Tabs>
<TabsItem>Рекомендации</TabsItem>
<TabsItem selected>Лента</TabsItem>
</Tabs>Использование selectedId/defaultSelectedId у Tabs
Также можно управлять активной вкладкой через свойства selectedId/defaultSelectedId у Tabs.
Для того, чтобы этот подход работал, нужно, чтобы у каждой вкладки TabsItem был выставлено свойство id:
<Tabs defaultSelectedId="news">
<TabsItem id="recommendations">Рекомендации</TabsItem>
<TabsItem id="news">Лента</TabsItem>
</Tabs>const [selected, setSelected] = React.useState('news');
<Tabs selectedId={selected} onSelectedIdChange={setSelected}>
<TabsItem id="recommendations">Рекомендации</TabsItem>
<TabsItem id="news">Лента</TabsItem>
</Tabs>;TabsItem
Элемент вкладки. Автоматически наследует режим отображения (mode) от родительского компонента Tabs.
Состояния
selected
Свойство selected помечает вкладку выбранной.
disabled
Свойство disabled блокирует взаимодействие с компонентом и добавляет визуальную индикацию недоступности.
Дополнительный контент
Компонент поддерживает различные варианты оформления вкладок:
Иконки
before— иконка перед текстом:- Для
mode="default"используйте иконки24px; - Для других режимов (
accent,secondary) — иконки20px.
- Для
after— иконка после текста (например,<Icon16Dropdown />).
Статус
Свойство status — добавляет элемент для отображения состояния:
React.ReactElement— компонентBadgeилиCounter(сsize="s").number— отображает текстовый блок с числом.
Состояния взаимодействия
Компонент поддерживает все стандартные состояния из Tappable:
hoverMode— стиль при наведении;activeMode— стиль при активации;focusVisibleMode— стиль при фокусе.
Особенности использования
- Всегда используйте
TabsItemвнутри компонентаTabs. - Для корректной работы доступности (a11y) необходимо:
- Указать
idдля вкладки - Связать с контентом через
aria-controls(см. документациюTabs)
- Указать
Доступность (a11y)
Для корректной работы со скринридерами необходимо:
-
В
TabsItemпередать:id— уникальный идентификатор вкладкиaria-controls— указывает на id связанной области контента
-
В области контента указать:
id— соответствуетaria-controlsвкладкиtabIndex="0"— делает область фокусируемойaria-labelledby— ссылается на id соответствующей вкладки
Пример корректной разметки:
<Tabs>
<TabsItem id="tab1" aria-controls="content1">
Вкладка 1
</TabsItem>
<div id="content1" tabIndex={0} aria-labelledby="tab1">
Контент 1
</div>
</Tabs>Свойства и методы
Tabs
| Свойство | Описание |
|---|---|
defaultSelectedId | stringИдентификатор выбранной вкладки по умолчанию. Чтобы свойство работало корректно, у каждого По умолчанию: - |
getRootRef | Ref<HTMLDivElement>По умолчанию: - |
layoutFillMode | "auto" | "stretched" | "shrinked"При
По умолчанию: auto |
mode | "default" | "secondary" | "accent"Режим отображения компонента. По умолчанию: default |
onSelectedIdChange | ((id: string) => void)Обработчик изменения выбранной вкладки. Чтобы свойство работало корректно, у каждого По умолчанию: - |
scrollBehaviorToSelectedTab | ScrollLogicalPositionОтвечает за горизонтальное выравнивание при прокрутке до активной вкладки. По умолчанию: nearest |
selectedId | stringИдентификатор выбранной вкладки. Чтобы свойство работало корректно, у каждого По умолчанию: - |
withScrollToSelectedTab | booleanВключает прокрутку контейнера до активной ( По умолчанию: - |
TabsItem
| Свойство | Описание |
|---|---|
activated | booleanПозволяет управлять По умолчанию: - |
activeMode | StateModeLiteralСтиль подсветки active-состояния. Если передать произвольную строку, она добавится как css-класс во время active. По умолчанию: - |
after | ReactNodeДобавляет иконку справа. Например, По умолчанию: - |
before | ReactNodeДобавляет иконку слева.
По умолчанию: - |
Component | ElementType<any, keyof IntrinsicElements>По умолчанию: - |
disabled | booleanБлокировка взаимодействия с компонентом. По умолчанию: - |
focusVisibleMode | FocusVisibleModeСтиль аутлайна focus visible. Если передать произвольную строку, она добавится как css-класс при :focus-visible По умолчанию: inside |
getRootRef | Ref<HTMLElement>По умолчанию: - |
hasActive | booleanУказывает, должен ли компонент реагировать на По умолчанию: false |
hasHover | booleanУказывает, должен ли компонент реагировать на По умолчанию: - |
hovered | booleanПозволяет управлять По умолчанию: - |
hoverMode | StateModeLiteralСтиль подсветки hover-состояния. Если передать произвольную строку, она добавится как css-класс во время hover. По умолчанию: styles.hover |
selected | booleanФлаг для отображения выбранного состояния. По умолчанию: false |
status | number | ReactElement<unknown, string | JSXElementConstructor<any>>Добавляет элемент слева от
По умолчанию: - |