Именование
Текст кнопки должен ясно описывать действие. Если содержимое — только иконка, используйте IconButton с явным aria-label.
Работа с клавиатурой
ОбъявлениеПереведите фокус на демо и нажмите клавишу из таблицы.
| Клавиша | Действие |
|---|---|
| EnterSpace | Активирует кнопку в фокусе. Это нативный <button>; с asChild у дочернего элемента остаются свои клавиши, и ссылка реагирует только на Enter. |
- Выполняемое действие должно оставаться понятным из текста.
- При полиморфном использовании
asChildдолжен сохраняться интерактивный элемент, с которым можно работать с клавиатуры.
Поведение фокуса
- Фокус должен попадать на интерактивный корень.
- Видимое выделение фокуса должно сохраняться после кастомной стилизации.
Семантика для скринридеров
- Доступное имя должно браться из видимого текста или поддерживаемых способов именования.
- Кнопка должна оставаться кнопкой, если только вы намеренно не меняете семантику через
asChild.
Семантика формы
typeпо умолчанию не задан: как и нативный<button>,Buttonотправляет окружающую форму.- Задайте
type='button'для действий, которые не должны отправлять форму. - Используйте
type='submit'осознанно, когда кнопка участвует в отправке формы.
Риски доступности
- Неоднозначный текст вроде «Продолжить» без окружающего контекста.
- Использование
asChildс дочерним элементом, теряющим интерактивную семантику. - Замена текста спиннером или иконкой без сохранения понятного смысла.