Tabs

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

Загружается...

Задаётся свойством mode:

  • default — стандартное отображение вкладок;
  • accent — акцентный вариант, выделяет активную вкладку;
  • secondary — более сдержанный стиль для второстепенных разделов.
Загружается...

Задаётся свойством layoutFillMode:

  • auto — автоматическое распределение (по умолчанию):
    • равномерно занимают всю ширину при использовании внутри HorizontalScroll;
    • равномерное распределение в режиме default на всех платформах кроме VKCOM.
  • stretched — вкладки растягиваются на всю доступную ширину;
  • shrinked — вкладки сжимаются по размеру контента.

По умолчанию автоматическая прокрутка к выбранной вкладке отключёна. Для включения:

  • withScrollToSelectedTab — включает прокрутку к активной вкладке;
  • scrollBehaviorToSelectedTab — контролирует горизонтальное выравнивание при прокрутке (соответствует параметрам scrollIntoView ↗).
  • Вертикальная прокрутка автоматически отключается, если вкладка находится вне видимой области по вертикали.
  • В браузерах без поддержки параметров scrollIntoView прокрутка будет отключёна.

Управлять активной вкладкой можно вручную задавая selected у необходимой вкладки:

<Tabs>
  <TabsItem>Рекомендации</TabsItem>
  <TabsItem selected>Лента</TabsItem>
</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>;

Элемент вкладки. Автоматически наследует режим отображения (mode) от родительского компонента Tabs.

Загружается...

Свойство selected помечает вкладку выбранной.

Загружается...

Свойство disabled блокирует взаимодействие с компонентом и добавляет визуальную индикацию недоступности.

Загружается...

Компонент поддерживает различные варианты оформления вкладок:

  • before — иконка перед текстом:
    • Для mode="default" используйте иконки 24px;
    • Для других режимов (accent, secondary) — иконки 20px.
  • after — иконка после текста (например, <Icon16Dropdown />).
Загружается...

Свойство status — добавляет элемент для отображения состояния:

  • React.ReactElement — компонент Badge или Countersize="s").
  • number — отображает текстовый блок с числом.
Загружается...

Компонент поддерживает все стандартные состояния из Tappable:

  • hoverMode — стиль при наведении;
  • activeMode — стиль при активации;
  • focusVisibleMode — стиль при фокусе.
  1. Всегда используйте TabsItem внутри компонента Tabs.
  2. Для корректной работы доступности (a11y) необходимо:
    • Указать id для вкладки
    • Связать с контентом через aria-controls (см. документацию Tabs)

Для корректной работы со скринридерами необходимо:

  1. В TabsItem передать:

    • id — уникальный идентификатор вкладки
    • aria-controls — указывает на id связанной области контента
  2. В области контента указать:

    • 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>
СвойствоОписание
defaultSelectedIdstring

Идентификатор выбранной вкладки по умолчанию. Чтобы свойство работало корректно, у каждого TabsItem должно быть прокинуто свойство id.

По умолчанию: -
getRootRefRef<HTMLDivElement>
По умолчанию: -
layoutFillMode"auto" | "stretched" | "shrinked"

При auto ширина вкладок определяется контекстом:

  • равномерно занимают всю доступную ширину при вложении в HorizontalScroll
  • равномерно занимают всю доступную ширину при mode=default и platform !== ‘VKCOM’ При stretched и shrinked вкладки либо равномерно занимают всю ширину, либо выравниваются по контенту соответственно.
По умолчанию: auto
mode"default" | "secondary" | "accent"

Режим отображения компонента.

По умолчанию: default
onSelectedIdChange((id: string) => void)

Обработчик изменения выбранной вкладки. Чтобы свойство работало корректно, у каждого TabsItem должно быть прокинуто свойство id.

По умолчанию: -
scrollBehaviorToSelectedTabScrollLogicalPosition

Отвечает за горизонтальное выравнивание при прокрутке до активной вкладки.

По умолчанию: nearest
selectedIdstring

Идентификатор выбранной вкладки. Чтобы свойство работало корректно, у каждого TabsItem должно быть прокинуто свойство id.

По умолчанию: -
withScrollToSelectedTabboolean

Включает прокрутку контейнера до активной (selected) вкладки.

По умолчанию: -
СвойствоОписание
activatedboolean

Позволяет управлять activated-состоянием извне.

По умолчанию: -
activeModeStateModeLiteral

Стиль подсветки active-состояния. Если передать произвольную строку, она добавится как css-класс во время active.

По умолчанию: -
afterReactNode

Добавляет иконку справа.

Например, <Icon16Dropdown />.

По умолчанию: -
beforeReactNode

Добавляет иконку слева.

  • Для mode="default" используйте иконки размером 24.
  • Для всех остальных mode используйте иконки размером 20.
По умолчанию: -
ComponentElementType<any, keyof IntrinsicElements>
По умолчанию: -
disabledboolean

Блокировка взаимодействия с компонентом.

По умолчанию: -
focusVisibleModeFocusVisibleMode

Стиль аутлайна focus visible. Если передать произвольную строку, она добавится как css-класс при :focus-visible

По умолчанию: inside
getRootRefRef<HTMLElement>
По умолчанию: -
hasActiveboolean

Указывает, должен ли компонент реагировать на active-состояние.

По умолчанию: false
hasHoverboolean

Указывает, должен ли компонент реагировать на hover-состояние.

По умолчанию: -
hoveredboolean

Позволяет управлять hovered-состоянием извне.

По умолчанию: -
hoverModeStateModeLiteral

Стиль подсветки hover-состояния. Если передать произвольную строку, она добавится как css-класс во время hover.

По умолчанию: styles.hover
selectedboolean

Флаг для отображения выбранного состояния.

По умолчанию: false
statusnumber | ReactElement<unknown, string | JSXElementConstructor<any>>

Добавляет элемент слева от after.

  • React.ReactElement – либо Badge ↗ с параметром mode="prominent". Либо Counter ↗ с параметрами mode="prominent" size="s".
  • number – для показа текстового блока с переданным числом.
По умолчанию: -