Skip to content

CdsButton

Кнопка — основной способ запустить действие: отправить форму, открыть модальное окно, подтвердить выбор. Вид (variant) и цвет (color) подсказывают роль кнопки: залитая solid — главное действие экрана, soft, outline и ghost — второстепенные.

Storybook GitLab Figma
Покрытие тестами: 97% — хорошее покрытие
API в спеках
37 / 38 пропсы, события, слоты и exposed, у которых есть тест
Тест-кейсы
59 юнит · 2 браузерных
Известные баги
2 зафиксированы тестом it.fails
Покрытие кода
98% строк · 97.7% ветвей замер v4.0.0-alpha.13
A11y (axe)
11 рекомендаций в 14 историях замер v4.0.0-alpha.11

Для перехода, оформленного как текст в абзаце, подойдёт CdsLink, а для выбора одного из вариантов — CdsButtonToggle.

Анатомия ​

Кнопка состоит из контейнера и трёх зон контента. Иконки задаются пропсами prepend-icon / append-icon или одноимёнными слотами, при loading контент замещается индикатором из слота loader.

Вариации ​

Вид ​

Свойство variant задаёт, как нарисована кнопка. По умолчанию — solid.

ВидКак выглядитКогда
solidзаливка цветомглавное действие экрана
softполупрозрачный фон цветавторостепенное действие
outlineрамка, фон прозрачныйвторостепенное действие на плотном фоне
surfaceрамка на подложке поверхностидействие поверх изображения или графика
ghostни фона, ни рамкидействие внутри панели, таблицы, тоста
Sandbox Storybook

Цвет ​

Свойство color задаёт цвет в любом виде. По умолчанию — brand. Принимает:

  • роль: brand — цвет бренда, accent — акцентная кнопка (в ДС совпадает с brand, тема может её перекрасить), neutral — нейтральная, danger — необратимое действие, inverse — для тёмных подложек;
  • алиас палитры: red, green, cyan, … black, white;
  • имя токена темы: status-success-surface, other-lime-fill;
  • любой CSS-цвет: #7c3aed, oklch(…).

Ховер, нажатие и недоступность для любого цвета строит плёнка состояний — отдельные токены на цвет не нужны.

Sandbox Storybook

Устаревшее свойство appearance ​

appearance продолжает работать и выводит пару variant + color, а в консоль разработки один раз на значение пишет [CDS UPGRADE]. Явно заданные variant и color важнее appearance.

appearancevariantcolor
primarysolidbrand
secondarysoftbrand
tertiarysoftneutral
inversesolidinverse
transparentghostbrand

Размеры ​

Свойство size меняет высоту и отступы кнопки. Размер по умолчанию — md.

Sandbox Storybook

Иконки ​

Свойства prepend-icon и append-icon добавляют иконку до и после текста из text.

Sandbox Storybook

Свойство icon превращает кнопку в кнопку-иконку: текст скрывается, остаётся квадратная кнопка с одной иконкой.

Sandbox Storybook

Компоновка ​

Свойство block растягивает кнопку на всю ширину родительского контейнера.

Sandbox Storybook

Свойство stacked ставит иконку над текстом. Такая кнопка вдвое выше обычной того же размера, а её минимальная ширина равна высоте.

Sandbox Storybook

Свойство spaced разводит слоты prepend и append к краям кнопки. Значение задаёт, с какой стороны от контента появляется свободное место: start — контент прижимается к append, end — к prepend, both — остаётся по центру. Эффект виден, только когда кнопка шире контента, поэтому обычно spaced работает в паре с block или заданной шириной.

Sandbox Storybook

Слоты ​

Слоты заменяют контент из пропсов, когда нужна полная свобода разметки.

СлотОписание
prependКонтент перед текстом. Замещает иконку из prepend-icon
defaultКонтент внутри кнопки. Замещает текст из text
appendКонтент после текста. Замещает иконку из append-icon
loaderЗагрузочный индикатор. Отображается вместо контента при loading
Sandbox Storybook

Кнопка-ссылка ​

Передайте href (или to с объектом RouteLocationRaw из vue-router) — и кнопка отрендерится тегом a со всеми атрибутами ссылки, сохранив внешний вид и свойства кнопки.

Sandbox Storybook

Рекомендации ​

Сценарии использования ​

Отправка формы ​

Залитая кнопка запускает главное действие формы. Свойство loading показывает ход запроса и защищает от повторной отправки, а соседняя soft-кнопка цвета neutral даёт способ отказаться от действия.

Sandbox Storybook

Панель действий ​

Повторяющиеся действия над записью — редактировать, дублировать, удалить — удобно собрать в компактную панель из кнопок-иконок. Свойство icon убирает текст, size="sm" экономит место. Не забудьте aria-label: без текста он остаётся единственным названием действия.

Sandbox Storybook

Навигация по шагам ​

В мастерах и многошаговых формах залитая кнопка ведёт вперёд, soft — назад. Иконки-шевроны в prepend-icon и append-icon подчёркивают направление, а disabled закрывает движение за границы шагов.

Sandbox Storybook

API ​

Пропсы

ИмяТипПо умолчаниюОписание
activeboolean | undefined—Управление активным состоянием компонента
activeColorstring | undefined—Цвет компонента, когда он находится в активном состоянии
appearancedeprecated"inverse" | "primary" | "secondary" | "tertiary" | "transparent" | undefined—Внешний вид компонента. Устарел: используйте variant и color
appendIconIconValue | undefined—Иконка в слоте append после контента
baseColorstring | undefined—Цвет неактивного компонента
blockboolean | undefined—Растягивает кнопку на всю доступную ширину контейнера
color(string & {}) | "neutral" | "brand" | "accent" | "danger" | "inverse" | undefined'brand'Цвет компонента: роль, алиас палитры, токен темы или CSS-цвет
contentstring | number | undefined—Контент, отображаемый в компоненте.
disabledboolean | null | undefinednullЗаблокированное состояние
exactboolean | undefined—Если true, активное состояние будет применяться только при точном совпадении маршрута
heightstring | number | undefined—Высота компонента
hrefstring | undefined—Атрибут href для ссылки. Если указан, компонент будет вести себя как обычная ссылка
iconboolean | IconValue | undefined—Иконка, компонент будет отображаться в состоянии только иконки
loadingstring | boolean | undefined—Индикатор загрузки для компонента
maxHeightstring | number | undefined—Максимальная высота компонента
maxWidthstring | number | undefined—Максимальная ширина компонента
minHeightstring | number | undefined—Минимальная высота компонента
minWidthstring | number | undefined—Минимальная ширина компонента
prependIconIconValue | undefined—Иконка в слоте prepend перед контентом
readonlyboolean | null | undefinednullТолько для чтения
replaceboolean | undefined—Если true, навигация по маршруту будет заменять текущую запись в истории вместо добавления новой
selectedClassstring | undefined—CSS класс для выбранного состояния
sizenumber | "xs" | "sm" | "md" | "lg" | "xl" | undefined'md'Размер компонента
spaced"both" | "start" | "end" | undefined—Разводит слоты prepend и append к краям кнопки.
stackedboolean | undefined—Располагает иконки и контент вертикально — иконка над текстом
tagstring | JSXComponent<any> | undefined'button'Пользовательский HTML-тег для отображения
textstring | number | undefined—Текст, отображаемый в компоненте.
themestring | undefined—Тема компонента
toLinkTo | undefined—Маршрут назначения или объект для RouterLink. Если указан, компонент будет вести себя как RouterLink
valueany—Значение компонента в группе
variant"solid" | "soft" | "outline" | "surface" | "ghost" | undefined'solid'Вид компонента: solid, soft, outline, surface, ghost
widthstring | number | undefined—Ширина компонента

События

ИмяТипОписание
group:selected[value: { value: boolean; }]Событие, возникающее при выборе кнопки в группе. value - булевое значение, указывающее, выбрана ли кнопка (true) или нет (false).

Слоты

ИмяТипОписание
appendanyКонтент после текста
defaultanyКонтент внутри кнопки
loaderanyЗагрузочный индикатор
prependanyКонтент перед текстом

Exposed

ИмяТипОписание
groupGroupItemProvide | nullВозвращает текущий контекст группы, если эта кнопка используется в компоненте группы (например, CdsButtonGroup).