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>> Добавляет элемент слева от
По умолчанию: - |