В библиотеке Ant Design элементы интерфейса по
умолчанию поддерживают управление с клавиатуры через стандартные
HTML-атрибуты tabIndex, onFocus,
onBlur и обработчики событий клавиш. Это позволяет
реализовать доступность (accessibility) и удобство
работы без мыши. Любой компонент, который может получать фокус (кнопки,
ссылки, поля ввода), автоматически участвует в цикле табуляции.
Ключевые моменты:
Menu и навигация стрелкамиКомпонент Menu Ant Design полностью поддерживает управление с клавиатуры. Основные правила:
Пример кода:
import { Menu } from 'antd';
import { MailOutlined } from '@ant-design/icons';
const menuItems = [
{ label: 'Пункт 1', key: '1' },
{ label: 'Пункт 2', key: '2', children: [
{ label: 'Подпункт 2.1', key: '2-1' },
{ label: 'Подпункт 2.2', key: '2-2' },
]
},
{ label: 'Пункт 3', key: '3' },
];
const AppMenu = () => (
<Menu mode="vertical" items={menuItems} />
);
В этом примере стрелки позволяют перемещаться между пунктами, а Enter активирует выбранный элемент. Для вертикального меню поддерживается фокусировка только одного элемента в один момент.
В компонентах форм (Form.Item, Input, Select, DatePicker) Ant Design реализует автоматическую фокусировку с клавиатуры.
autoFocus позволяет сразу установить фокус на
элемент при рендере.tabIndex позволяет управлять
последовательностью фокусировки.onKeyDown может быть использован для обработки
специальных комбинаций клавиш, например, перехода на следующий элемент
при нажатии Enter.Пример:
import { Form, Input, Button } from 'antd';
const MyForm = () => (
<Form layout="vertical">
<Form.Item label="Имя">
<Input placeholder="Введите имя" autoFocus />
</Form.Item>
<Form.Item label="Email">
<Input placeholder="Введите email" />
</Form.Item>
<Form.Item>
<Button type="primary">Отправить</Button>
</Form.Item>
</Form>
);
Здесь Tab перемещает фокус от первого поля к следующему и затем на кнопку.
Компонент Table поддерживает навигацию по ячейкам с
помощью стрелок, если используется расширенный режим с
rowSelection или кастомными обработчиками событий. Основные
рекомендации:
tabIndex={0} для ячеек, куда необходимо
попасть с клавиатуры.onKeyDown на таблице для
кастомного поведения стрелок.:focus для выделения активной ячейки.Пример обработки стрелок:
const handleKeyDown = (e, rowIndex, colIndex) => {
switch (e.key) {
case 'ArrowDown':
// логика перемещения фокуса на следующую строку
break;
case 'ArrowUp':
// логика перемещения фокуса на предыдущую строку
break;
case 'ArrowRight':
// логика перемещения фокуса на следующую колонку
break;
case 'ArrowLeft':
// логика перемещения фокуса на предыдущую колонку
break;
default:
break;
}
};
Компонент Modal поддерживает закрытие с клавиатуры с помощью Esc. Также модальные окна блокируют фоновые элементы от фокусировки, обеспечивая trap focus — фокус остаётся внутри модального окна до его закрытия.
keyboard={true} включает обработку клавиши
Esc.maskClosable={false} предотвращает закрытие по клику
вне модального окна.autoFocus можно устанавливать фокус на
конкретный элемент внутри модалки.Для полного соответствия WCAG важно использовать ARIA-атрибуты:
role="menu", role="menuitem" — для
меню.aria-expanded и aria-haspopup — для
подменю.aria-disabled — для неактивных элементов.aria-selected — для выбора внутри списков и
таблиц.Ant Design уже включает большинство необходимых ARIA-атрибутов по умолчанию, но при кастомной реализации их необходимо добавлять вручную.
Для расширенной навигации и горячих клавиш можно использовать
обработку событий onKeyDown на уровне компонента или всей
страницы. Примеры применения:
Использование таких комбинаций требует сохранения стандартного поведения для Tab и стрелок, чтобы не нарушать привычную навигацию.
Навигация с клавиатуры в Ant Design строится на основе стандартных
HTML-событий и расширяется компонентами, которые имеют собственные
обработчики стрелок, Enter, Space и Esc. Правильная организация
фокусировки, использование tabIndex,
autoFocus, ARIA-атрибутов и обработчиков
onKeyDown позволяет создавать полностью доступные
интерфейсы, где пользователь может работать без мыши, а сложные
структуры меню, таблиц и форм остаются интуитивными и удобными.