ARIA (Accessible Rich Internet Applications) — это спецификация, которая обеспечивает доступность веб-приложений для пользователей с ограниченными возможностями. В контексте Ant Design ARIA-атрибуты играют ключевую роль в создании интерактивных компонентов, таких как модальные окна, меню, вкладки и формы, которые корректно интерпретируются экранными читалками и другими вспомогательными технологиями.
Роль компонента (role) Каждому
элементу присваивается роль, которая описывает его функциональное
назначение. Например:
role="button" для кнопок, которые могут запускать
действия.role="dialog" для модальных окон.role="tablist" и role="tab" для
вкладок.Ant Design автоматически устанавливает базовые роли для большинства
компонентов, но их можно переопределять при необходимости через проп
role.
Состояния и свойства (aria-*)
ARIA-атрибуты позволяют отслеживать состояние компонента и передавать
его вспомогательным технологиям:
aria-disabled="true" — элемент недоступен для
взаимодействия.aria-expanded="true|false" — состояние раскрытия,
например, для аккордеонов и селектов.aria-selected="true|false" — используется для
обозначения выбранных элементов вкладок или списков.В Ant Design такие состояния синхронизированы с внутренними пропсами
компонентов: например, Menu.Item поддерживает
disabled и автоматически выставляет
aria-disabled.
Связывание элементов (aria-labelledby и
aria-describedby) Эти атрибуты используются для
связывания элементов с их описаниями или заголовками:
aria-labelledby указывает на ID элемента, который
служит заголовком.aria-describedby связывает компонент с элементом,
содержащим подробное описание.Пример в Ant Design:
<Modal
title="Подтверждение действия"
visible={isModalVisible}
aria-labelledby="modal-title"
aria-describedby="modal-description"
>
<p id="modal-description">Вы уверены, что хотите удалить этот элемент?</p>
</Modal>Компоненты Menu и Dropdown используют ARIA
для обозначения вложенности и состояния пунктов:
role="menu" для контейнера меню.role="menuitem" для каждого пункта.aria-haspopup="true" указывает, что элемент открывает
подменю.aria-expanded отражает текущее состояние
раскрытия.Пример:
<Menu>
<Menu.SubMenu title="Файл" aria-haspopup="true">
<Menu.Item key="1">Новый</Menu.Item>
<Menu.Item key="2">Открыть</Menu.Item>
</Menu.SubMenu>
</Menu>
Компонент Tabs в Ant Design полностью совместим с ARIA.
Каждый элемент имеет:
role="tablist"role="tab",
aria-selected="true|false",
aria-controls="panel-id"role="tabpanel",
id="panel-id"Пример:
<Tabs defaultActiveKey="1">
<Tabs.TabPane tab="Профиль" key="1" id="tab-1">
Содержимое вкладки Профиль
</Tabs.TabPane>
<Tabs.TabPane tab="Настройки" key="2" id="tab-2">
Содержимое вкладки Настройки
</Tabs.TabPane>
</Tabs>
Формы — один из ключевых аспектов доступности. Ant Design предоставляет компоненты с готовыми ARIA-атрибутами:
Form.Item автоматически связывает label с
полем ввода через htmlFor и
aria-labelledby.Input, Select,
Checkbox и Radio используют атрибуты
aria-required, aria-invalid и
aria-describedby для передачи состояния в экранные
читалки.Пример:
<Form>
<Form.Item
label="Email"
name="email"
rules={[{ required: true, message: 'Введите email' }]}
aria-required="true"
>
<Input placeholder="example@mail.com" />
</Form.Item>
</Form>
Компоненты Ant Design часто обновляют свое состояние динамически. ARIA-атрибуты синхронизируются с пропсами:
Collapse автоматически меняет
aria-expanded при открытии панели.Tree управляет aria-selected и
aria-expanded для каждой ветви.Slider и Switch обновляют
aria-valuenow и aria-checked
соответственно.Это обеспечивает правильное оповещение вспомогательных технологий о текущем состоянии интерфейса.
Хотя Ant Design покрывает большинство случаев по умолчанию, есть возможность ручного управления:
<Button
role="switch"
aria-checked={isChecked}
onCl ick={() => setChecked(!isChecked)}
>
Переключить
</Button>
Важный момент: при ручной настройке ARIA нужно сохранять соответствие между состоянием и атрибутами, иначе экранные читалки будут выдавать некорректную информацию.
div вместо кнопки без необходимости; при этом роль должна
точно соответствовать функционалу.aria-* должны отражать реальное состояние компонента.aria-labelledby или aria-describedby.ARIA в Ant Design — это не просто набор атрибутов, а целостная система, которая делает интерфейсы доступными и предсказуемыми для всех пользователей.