Button
Компонент, который даёт пользователю возможность выполнить какое‑то действие или перейти на другую страницу.
Правильный HTML-тег определяется автоматически (по умолчанию button или a при передаче свойства href).
Связанные компоненты:
Режимы отображения
Задаётся свойством mode.
"primary"— акцентная кнопка для основных действий (например, «Сохранить», «Отправить», «Открыть»);"secondary"— второстепенная кнопка для важных, но не основных действий (например, «Отмена», «Редактировать»). Часто используется в паре сprimary;"outline"— второстепенная кнопка с обводкой и средним акцентом. Подходит, когда нужно сохранить визуальную лёгкость интерфейса, или когда фонsecondaryсливается с фоном интерфейса/баннера;"tertiary"— кнопка без фона с низким акцентом для действий с минимальным влиянием на интерфейс (например, «Помощь», «Подробнее», «Справка»). Применяется, когдаprimaryиsecondaryуже заданы;"link"— визуально какtertiary, но без фона и боковых отступов. Удобна в шапках или в ряду с элементами интерфейса, где нужен небольшой отступ между объектами.
Визуальное оформление
Цвет
Задаётся свойством appearance.
"accent"
Акцентный цвет, меняющийся в зависимости от светлой или тёмной схемы.
"accent-invariable"
Акцентный цвет, который не меняется в зависимости от светлой или тёмной темы.
"positive"
Цвет для действия подтверждения (чаще всего зелёный).
"negative"
Цвет критических действий (чаще всего красный).
"neutral"
Нейтральный цвет, который может служить альтернативным акцентным.
"overlay"
Цвет для кнопок поверх цветных элементов или фото.
Скругление
Задаётся свойством rounded.
Позволяет получить полностью скруглённую кнопку.
Размеры
Задаётся свойством size.
Значения, соответствующие каждому размеру, зависят от параметра адаптивности density.
В режиме density="compact" значения каждого из размеров будут меньше, чем в режиме density="regular".
Состояния
disabled
Отключает взаимодействие с кнопкой и добавляет визуальную индикацию недоступности.
loading
Показывает индикацию загрузки вместо содержимого кнопки. Используйте, когда после нажатия запускаются длительные действия.
⚠️ Важно для доступности: при 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.
Доступность (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
Свойство disableSpinnerAnimation отключает анимацию при loading={true}.
Свойства и методы
| Свойство | Описание |
|---|---|
activated | booleanПозволяет управлять По умолчанию: - |
activeClassName | stringDeprecated: Since 7.3.0. Будет удалено в VKUI v9. Используйте свойство По умолчанию: - |
activeEffectDelay | numberДлительность показа По умолчанию: - |
activeMode | StateModeLiteralСтиль подсветки active-состояния. Если передать произвольную строку, она добавится как css-класс во время active. По умолчанию: - |
after | ReactNodeКонтент, отображаемый после основного содержимого кнопки. По умолчанию: - |
align | AlignTypeПо умолчанию: center |
appearance | "accent" | "positive" | "negative" | "neutral" | "overlay" | "accent-invariable"Цветовая схема кнопки. По умолчанию: accent |
before | ReactNodeКонтент, отображаемый перед основным содержимым кнопки. По умолчанию: - |
borderRadiusMode | "auto" | "inherit"Задает border-radius элементу
В режиме По умолчанию: - |
Component | ElementType<any, keyof IntrinsicElements>По умолчанию: - |
disableSpinnerAnimation | booleanОтключает анимацию спиннера загрузки. По умолчанию: - |
elevation | ElevationДобавляет тень кнопке. По умолчанию: - |
focusVisibleMode | FocusVisibleModeСтиль аутлайна focus visible. Если передать произвольную строку, она добавится как css-класс при :focus-visible По умолчанию: - |
getRootRef | Ref<HTMLElement>По умолчанию: - |
hasActive | booleanУказывает, должен ли компонент реагировать на По умолчанию: - |
hasHover | booleanУказывает, должен ли компонент реагировать на По умолчанию: - |
hasHoverWithChildren | booleanПозволяет родительскому компоненту
иметь Присваивается родителькому компоненту. По умолчанию: - |
hoverClassName | stringDeprecated: Since 7.3.0. Будет удалено в VKUI v9. Используйте свойство По умолчанию: - |
hovered | booleanПозволяет управлять По умолчанию: - |
hoverMode | StateModeLiteralСтиль подсветки hover-состояния. Если передать произвольную строку, она добавится как css-класс во время hover. По умолчанию: - |
loading | booleanВключает состояние загрузки (отображает спиннер). ⚠️ Важно для доступности: При использовании По умолчанию: - |
loadingLabel | stringТекст для По умолчанию: Загрузка... |
mode | "link" | "primary" | "secondary" | "tertiary" | "outline"Режим отображения кнопки. По умолчанию: primary |
render | ((props: AllHTMLAttributes<HTMLElement> & HasRootRef<HTMLElement>) => ReactNode)Позволяет переопределить рендер компонента, получая собранные свойства
(включая вычисленные Позволяет гибко объединять несколько компонентов без создания промежуточных DOM-узлов и без ремаунта поддерева на каждый рендер. По умолчанию: - |
rounded | booleanДобавляет скругленные углы кнопке. По умолчанию: - |
size | "s" | "m" | "l"Размер кнопки. По умолчанию: s |
stretched | booleanРастягивает кнопку на всю ширину контейнера. По умолчанию: false |
unlockParentHover | booleanПозволяет родительскому компоненту показывать hovered-состояние при наведении на текущий дочерний компонент. Присваивается дочернему компоненту. По умолчанию: - |