НачалоОсновыКомпонентыТексты

Кнопка-иконка

Кнопка-иконка выполняет одно действие и вместо текста показывает одну иконку. Для скринридеров её называет label.

Стабильный Figma
ОбзорИспользованиеAPIДоступность
<tk-icon-button label="Search"><tk-icon name="search"></tk-icon></tk-icon-button>
<tk-icon-button label="Settings"><tk-icon name="settings"></tk-icon></tk-icon-button>
<tk-icon-button label="More actions"><tk-icon name="more-horizontal"></tk-icon></tk-icon-button>

Анатомия

Часть Что это
tk-icon-button сам элемент; одна остановка Tab; квадрат фиксированного размера
слот по умолчанию одна иконка, обязательна; скрыта от скринридеров
слот pressed иконка для состояния pressed, например залитая пара, по желанию
part button нативный <button> внутри; label становится его доступным именем

Варианты

<tk-icon-button label="Edit"><tk-icon name="edit"></tk-icon></tk-icon-button>
<tk-icon-button variant="secondary" label="Edit"><tk-icon name="edit"></tk-icon></tk-icon-button>
<tk-icon-button variant="outline" label="Edit"><tk-icon name="edit"></tk-icon></tk-icon-button>
<tk-icon-button variant="primary" label="Edit"><tk-icon name="edit"></tk-icon></tk-icon-button>
  • ghost (по умолчанию): голая иконка без подложки. Для панелей инструментов, шапок и строк. В отличие от ghost-Button, иконка и подсветка при наведении нейтральные, а не акцентные.
  • secondary: залитый квадрат, когда действию нужен вес заметного контрола.
  • outline: квадрат с рамкой, когда нужна видимая граница на пёстром фоне или в соединённой Button group. Рамка у неё светлая, поэтому на утопленной поверхности, например в нейтральном Banner или Section message, используйте ghost или secondary.
  • primary: главное быстрое действие панели. Не больше одной залитой кнопки-иконки на панель.

Опасное действие

tone="danger" отмечает действие, которое что-то удаляет. Выглядит всегда одинаково, какой бы variant вы ни задали: красный квадрат с красной иконкой.

<tk-icon-button tone="danger" label="Delete file"><tk-icon name="trash"></tk-icon></tk-icon-button>

У иконки нет слов, которые человек прочтёт перед нажатием, поэтому опасная кнопка-иконка должна открывать подтверждение, например Dialog, где названо, что будет удалено. Никогда не удаляйте с первого нажатия.

Форма

shape="round" делает кнопку круглой. Работает с любым вариантом, тоном и размером. Соединённая группа кнопок или Split button задаёт углы сама.

<tk-icon-button shape="round" label="Add"><tk-icon name="plus"></tk-icon></tk-icon-button>
<tk-icon-button variant="secondary" shape="round" label="Share"><tk-icon name="share"></tk-icon></tk-icon-button>

Размеры

<tk-icon-button size="small" label="Close"><tk-icon name="close"></tk-icon></tk-icon-button>
<tk-icon-button label="Close"><tk-icon name="close"></tk-icon></tk-icon-button>
<tk-icon-button size="large" label="Close"><tk-icon name="close"></tk-icon></tk-icon-button>
size Квадрат Иконка Скругление (rect)
small 24×24px icon-size-16 radius-8
medium (по умолчанию) 32×32px icon-size-16 radius-8
large 36×36px icon-size-16 radius-8

Стороны квадратов равны высотам Button, поэтому смешанные ряды выравниваются. small ровно 24px, это минимальный размер цели нажатия: не уменьшайте её, не давайте отрицательных отступов и не перекрывайте ничем. Иконка всегда 16px, её размер задаёт кнопка.

Состояния

<tk-icon-button disabled label="Edit"><tk-icon name="edit"></tk-icon></tk-icon-button>
<tk-icon-button loading label="Download report"><tk-icon name="download"></tk-icon></tk-icon-button>

Наведение, нажатие и фокус работают без атрибутов. При фокусе с клавиатуры у любой кнопки-иконки появляется рамка.

  • disabled: на кнопку нельзя перейти и нельзя нажать, а опасная кнопка становится серой. Лучше оставить кнопку активной.
  • loading: вместо иконки крутится индикатор, квадрат не меняется, повторные нажатия не срабатывают. Кнопка остаётся в фокусе, сохраняет label и сообщает скринридеру, что занята. Если задан ещё и disabled, кнопка будет отключена.
  • pressed: включённое состояние переключателя, см. ниже.

Переключатель

Для действий «вкл/выкл», например закладка, избранное, без звука, закрепить, задайте pressed. Положите залитую пару иконки в слот pressed, и кнопка будет их менять.

<tk-icon-button label="Bookmark" pressed>
  <tk-icon name="bookmark"></tk-icon>
  <tk-icon slot="pressed" name="bookmark-filled"></tk-icon>
</tk-icon-button>
  • pressed ставит aria-pressed. Кнопка без этого атрибута не объявляется переключателем.
  • Подпись называет действие, а не состояние: «Выключить звук», а не «Звук выключен». Скринридер сам добавит «нажата», а подпись, которая меняется, читается наоборот.
  • pressed управляете вы. Кнопка сама его не переключает и событий изменения не шлёт. Слушайте click и меняйте его либо оберните кнопку в Toggle button: он сделает это за вас.
  • Все варианты, кроме primary, во включённом состоянии подсвечиваются. Без иконки в слоте pressed состояние показывает только подсветка.
  • Не сочетайте pressed с tone="danger".

Подсказка

Оберните кнопку-иконку в Tooltip типа label, чтобы зрячие пользователи видели её название при наведении и фокусе. Не задавайте подсказке text: она покажет label кнопки, и они никогда не разойдутся.

<tk-tooltip type="label">
  <tk-icon-button label="Copy link"><tk-icon name="link"></tk-icon></tk-icon-button>
</tk-tooltip>

Делайте так для любой неочевидной иконки. Кнопка-иконка с одним label тоже доступна.