Перейти к содержимому

Button

Компонент, который даёт пользователю возможность выполнить какое‑то действие или перейти на другую страницу. Правильный HTML-тег определяется автоматически (по умолчанию button или a при передаче свойства href).

Связанные компоненты:

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

  • "primary" — акцентная кнопка для основных действий (например, «Сохранить», «Отправить», «Открыть»);
  • "secondary" — второстепенная кнопка для важных, но не основных действий (например, «Отмена», «Редактировать»). Часто используется в паре с primary;
  • "outline" — второстепенная кнопка с обводкой и средним акцентом. Подходит, когда нужно сохранить визуальную лёгкость интерфейса, или когда фон secondary сливается с фоном интерфейса/баннера;
  • "tertiary" — кнопка без фона с низким акцентом для действий с минимальным влиянием на интерфейс (например, «Помощь», «Подробнее», «Справка»). Применяется, когда primary и secondary уже заданы;
  • "link" — визуально как tertiary, но без фона и боковых отступов. Удобна в шапках или в ряду с элементами интерфейса, где нужен небольшой отступ между объектами.

Задаётся свойством appearance.

Акцентный цвет, меняющийся в зависимости от светлой или тёмной схемы.

Акцентный цвет, который не меняется в зависимости от светлой или тёмной темы.

Цвет для действия подтверждения (чаще всего зелёный).

Цвет критических действий (чаще всего красный).

Нейтральный цвет, который может служить альтернативным акцентным.

Цвет для кнопок поверх цветных элементов или фото.

Задаётся свойством rounded.

Позволяет получить полностью скруглённую кнопку.

Задаётся свойством size.

Значения, соответствующие каждому размеру, зависят от параметра адаптивности density. В режиме density="compact" значения каждого из размеров будут меньше, чем в режиме density="regular".

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

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

⚠️ Важно для доступности: при loading={true} компонент автоматически устанавливает aria-label в значение loadingLabel (по умолчанию «Загрузка…»), чтобы скринридер объявил контекст загрузки. Значение можно переопределить через loadingLabel.

Задаётся свойством align.

Слева и/или справа от текста можно добавить контент через свойства before и after соответственно. Чаще всего это иконки.

Рекомендации по размеру иконок:

  • size="s"12px;
  • size="m"16px;
  • size="l"24px.

Для size="l" в before/after также подойдёт компонент Counter.

before/after можно использовать без children — получится кнопка только с иконкой. Такие кнопки требуют дополнительных действий для доступности — см. раздел a11y.

Компонент автоматически выбирает правильный HTML-тег (button по умолчанию или a при передаче href), обеспечивая базовые требования доступности.

Поддерживаются все стандартные aria-атрибуты на случай, если нужно переопределить стандартное поведение.

При одновременной передаче href и disabled VKUI не передаёт href тегу a, отключая взаимодействие. По возможности не передавайте href и disabled вместе — это не соответствует a11y.

Для кнопки только с иконкой (before/after без children) обязательно добавьте aria-label. Ещё лучше — использовать VisuallyHidden с нужным текстом: это универсальнее для ассистивных технологий.

// хорошо
<Button before={<Icon16Search />} size="m" aria-label="Найти" />
 
// ещё лучше
<Button before={<Icon16Search />} size="m">
  <VisuallyHidden>Найти</VisuallyHidden>
</Button>

Свойство disableSpinnerAnimation отключает анимацию при loading={true}.

СвойствоОписание
activatedboolean

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

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

Deprecated: Since 7.3.0. Будет удалено в VKUI v9.

Используйте свойство activeMode.

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

Длительность показа active-состояния.

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

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

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

Контент, отображаемый после основного содержимого кнопки.

По умолчанию: -
alignAlignType
По умолчанию: center
appearance"accent" | "positive" | "negative" | "neutral" | "overlay" | "accent-invariable"

Цветовая схема кнопки.

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

Контент, отображаемый перед основным содержимым кнопки.

По умолчанию: -
borderRadiusMode"auto" | "inherit"

Задает border-radius элементу В режиме auto на маленьких экранах border-radius: 0, иначе определяется токеном --vkui--size_border_radius--regular.

По умолчанию: -
ComponentElementType<any, keyof IntrinsicElements>
По умолчанию: -
disableSpinnerAnimationboolean

Отключает анимацию спиннера загрузки.

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

Добавляет тень кнопке.

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

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

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

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

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

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

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

Позволяет родительскому компоненту иметь hovered-cостояние при наведении на любой дочерний элемент. По умолчанию состояние hovered у родителя сбрасывается.

Присваивается родителькому компоненту.

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

Deprecated: Since 7.3.0. Будет удалено в VKUI v9.

Используйте свойство hoverMode.

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

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

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

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

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

Включает состояние загрузки (отображает спиннер).

⚠️ Важно для доступности: При использовании loading={true} компонент автоматически устанавливает aria-label в значение loadingLabel (по умолчанию “Загрузка…”), чтобы скринридер мог объявить контекст загрузки. Вы можете переопределить это значение, передав свойство loadingLabel.

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

Текст для aria-label при состоянии загрузки. Подменяет переданный в компонент aria-label только когда loading={true}.

По умолчанию: Загрузка...
mode"link" | "primary" | "secondary" | "tertiary" | "outline"

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

По умолчанию: primary
render((props: AllHTMLAttributes<HTMLElement> & HasRootRef<HTMLElement>) => ReactNode)

Позволяет переопределить рендер компонента, получая собранные свойства (включая вычисленные className и style). Используется вместо Component.

Позволяет гибко объединять несколько компонентов без создания промежуточных DOM-узлов и без ремаунта поддерева на каждый рендер.

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

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

По умолчанию: -
size"s" | "m" | "l"

Размер кнопки.

По умолчанию: s
stretchedboolean

Растягивает кнопку на всю ширину контейнера.

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

Позволяет родительскому компоненту показывать hovered-состояние при наведении на текущий дочерний компонент.

Присваивается дочернему компоненту.

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