Сучасний веб насичений динамічними та складними інтерфейсами: модальними вікнами, випадними меню, аккордеонами, табами та кастомними віджетами. Візуально вони можуть виглядати та працювати чудово, проте для людей із порушеннями зору, які використовують екранні диктори (скрінрідери, як-от NVDA, JAWS або VoiceOver), або для користувачів, які керують сайтом виключно з клавіатури, такі елементи часто залишаються повністю «невидимими» або непридатними для використання.
Для вирішення цієї проблеми консорціум W3C створив специфікацію WAI-ARIA (Web Accessibility Initiative – Accessible Rich Internet Applications). Вона дає розробникам інструменти для передачі семантичного змісту та стану елементів веб-додатків допоміжним технологіям.
1. Що таке ARIA і як вона працює
ARIA – це набір спеціальних HTML-атрибутів, які додають семантичну інформацію до елементів сторінки, де стандартного HTML5 недостатньо. Усі ARIA-атрибути поділяються на три основні категорії:
- Roles (Ролі): Визначають, чим саме є елемент для користувача скрінрідера (наприклад,
role="dialog",role="tab",role="navigation",role="alert"). Роль задається один раз і зазвичай не змінюється динамічно. - States (Стани): Повідомляють про поточний динамічний стан елемента, який змінюється в процесі взаємодії користувача через JavaScript (наприклад,
aria-expanded="true/false",aria-hidden="true/false",aria-checked="true/false"). - Properties (Властивості): Описують додаткові характеристики елементів та зв’язки між ними (наприклад,
aria-label,aria-labelledby,aria-describedby,aria-controls).
2. Порівняльний аналіз ключових ARIA-атрибутів
| Атрибут | Категорія | Призначення | Приклад використання |
|---|---|---|---|
role="..." |
Роль | Визначає тип елемента, якщо стандартний тег HTML відсутній чи несе інший зміст. | <div role="button" tabindex="0">Кнопка</div> |
aria-label="..." |
Властивість | Задає явний текстовий опис для елемента, який не має видимого тексту. | <button aria-label="Закрити модальне вікно">✕</button> |
aria-labelledby="..." |
Властивість | Вказує ID елемента, який слугує заголовком/назвою для поточного блоку. | <div role="dialog" aria-labelledby="modal-title"> |
aria-expanded="..." |
Стан | Показує, чи розгорнутий пов’язаний вміст (аккордеон, меню, дропдаун). | <button aria-expanded="false" aria-controls="sub-menu"> |
aria-hidden="..." |
Стан | Приховує елемент від допоміжних технологій (іконки, декоративні елементи). | <svg aria-hidden="true">...</svg> |
aria-live="..." |
Властивість | Оголошує скрінрідеру про динамічні зміни на сторінці без перефокусування. | <div aria-live="polite">Товар додано в кошик</div> |
3. Перше правило ARIA та алгоритм впровадження
Головне правило специфікації W3C звучить так: «Не використовуйте ARIA, якщо ви можете використати семантичний HTML-тег» (No ARIA is better than bad ARIA). Нативний HTML уже містить вбудовану доступність, семантику та підтримку клавіатури за замовчуванням.
- Крок 1: Використовуйте семантичний HTML5 в першу чергу. Замість
<div class="btn" role="button">завжди віддавайте перевагу нативному<button>. Замість<div role="navigation">використовуйте<nav>. - Крок 2: Додавайте ARIA лише для складних/кастомних компонентів. Якщо ви розробляєте інтерактивний віджет (модальне вікно, таби, кастомний
select), для якого немає єдиного нативного HTML-тегу, використовуйте ARIA для зв’язування елементів та передачі станів. - Крок 3: Керуйте станами динамічно через JavaScript. При кліку чи натисканні клавіш оновлюйте відповідні атрибути в DOM (наприклад,
element.setAttribute('aria-expanded', 'true')). - Крок 4: Забезпечте повноцінну навігацію з клавіатури. ARIA не додає автоматичної підтримки клавіатури! Ви повинні самостійно обробляти клавіші
Tab,Enter,SpaceтаEscape, а також перевіряти наявність фокусу (tabindex="0").
Порада фронтенд-розробника: Поширена та небезпечна помилка – додавання
aria-hidden="true"на елементи, які містять фокусовані кнопки або посилання. Це призводить до того, що користувач клавіатури може потрапити фокусом на елемент, але скрінрідер мовчатиме, створюючи ефект «зламаного» сайту. Завжди тестуйте свої веб-додатки з вимкненою мишею за допомогою клавішіTabта увімкненим скрінрідером (наприклад, безкоштовним NVDA для Windows або VoiceOver на macOS).