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
.
Значения, соответствующие каждому размеру, зависят от параметра адаптивности sizeY
.
В режиме sizeY="compact"
значения каждого из размеров будут меньше, чем в режиме sizeY="regular"
.
Состояния
disabled
Свойство позволяет отключить возможность взаимодействия с кнопкой и добавляет визуальную индикацию недоступности;
loading
Свойство позволяет добавить индикацию загрузки вместо содержимого кнопки. Используйте, когда после взаимодействия с кнопкой запускаются затратные по времени действия.
Выравнивание
Задаётся свойством align
.
Контент в начале/в конце
В компоненте доступна возможность добавления дополнительного контента слева и/или справа от текста,
задаётся свойством before
и after
соответственно. Наиболее частый вариант использования свойств before
/after
- иконки.
Следует руководствоваться следующими правилами:
- для кнопок
size="s"
рекомендуется использовать иконки размером12px
; - для кнопок
size="m"
рекомендуется использовать иконки размером16px
; - для кнопок
size="l"
рекомендуется использовать иконки размером24px
.
Также для кнопок size="l"
можно использовать компонент Counter
в before
/after
.
Обратите внимание, что есть возможность использовать before
/after
без указания текста (свойство children
).
Таким образом можно создавать кнопки, которые содержат только иконку. Обратитесь к разделу a11y
,
потому что подобные кнопки требуют дополнительных действий для поддержания доступности.
Доступность (a11y)
Как уже было указано выше, компонент автоматически выбирает правильный HTML
-тег
(по умолчанию button
или a
при передаче свойства href
), обеспечивая базовые требования доступности.
Также компонент поддерживает все стандартные aria
-атрибуты, если вам необходимо переопределить
стандартное поведение.
Обратите внимание, что при передаче свойства href
и disabled
одновременно, VKUI перестаёт передавать для тэга a
свойство href
, отключая возможность взаимодействия.
По возможности старайтесь не передавать href
и disabled
одновременно, потому что это не соответствует a11y
.
Если вы используете кнопку, которая содержит только иконку (before
/after
свойство без указания children
),
то обязательно добавьте aria-label
для компонента. Лучшим решением вместо 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 | string Deprecated: Since 7.3.0. Свойство устарело и будет удалено в По умолчанию: - |
activeEffectDelay | number Длительность показа По умолчанию: - |
activeMode | StateModeLiteral Стиль подсветки active-состояния. Если передать произвольную строку, она добавится как css-класс во время active. По умолчанию: - |
after | ReactNode Контент, отображаемый после основного содержимого кнопки. По умолчанию: - |
align | AlignType По умолчанию: center |
appearance | "accent" | "positive" | "negative" | "neutral" | "overlay" | "accent-invariable" Цветовая схема кнопки. По умолчанию: accent |
baseClassName | string | false Deprecated: Since 7.3.0. Свойство устарело и будет удалено в По умолчанию: - |
baseStyle | CSSProperties Deprecated: Since 7.3.0. Свойство устарело и будет удалено в По умолчанию: - |
before | ReactNode Контент, отображаемый перед основным содержимым кнопки. По умолчанию: - |
borderRadiusMode | "auto" | "inherit" Задает border-radius элементу
В режиме По умолчанию: - |
Component | ElementType<any, keyof IntrinsicElements> По умолчанию: - |
disableSpinnerAnimation | boolean Отключает анимацию спиннера загрузки. По умолчанию: - |
focusVisibleMode | FocusVisibleMode Стиль аутлайна focus visible. Если передать произвольную строку, она добавится как css-класс при :focus-visible По умолчанию: - |
getRootRef | Ref<HTMLElement> По умолчанию: - |
hasActive | boolean Указывает, должен ли компонент реагировать на По умолчанию: - |
hasHover | boolean Указывает, должен ли компонент реагировать на По умолчанию: - |
hasHoverWithChildren | boolean Позволяет родительскому компоненту
иметь Присваивается родителькому компоненту. По умолчанию: - |
hoverClassName | string Deprecated: Since 7.3.0. Свойство устарело и будет удалено в По умолчанию: - |
hovered | boolean Позволяет управлять По умолчанию: - |
hoverMode | StateModeLiteral Стиль подсветки hover-состояния. Если передать произвольную строку, она добавится как css-класс во время hover. По умолчанию: - |
loading | boolean Включает состояние загрузки (отображает спиннер). По умолчанию: - |
mode | "link" | "primary" | "secondary" | "tertiary" | "outline" Режим отображения кнопки. По умолчанию: primary |
rounded | boolean Добавляет скругленные углы кнопке. По умолчанию: - |
size | "s" | "m" | "l" Размер кнопки. По умолчанию: s |
stretched | boolean Растягивает кнопку на всю ширину контейнера. По умолчанию: false |
unlockParentHover | boolean Позволяет родительскому компоненту показывать hovered-состояние при наведении на текущий дочерний компонент. Присваивается дочернему компоненту. По умолчанию: - |