A11y · Урок 41

Сложные компоненты и a11y

Модалка, аккордеон, выпадающее меню — это не «просто див». Ожидания экранных читалок стандартизированы: роль, состояние и поведение фокуса. Разбираем на живых паттернах.

Модальное окно

<div role="dialog" aria-modal="true" aria-labelledby="mTitle">
  <h2 id="mTitle">Подтверждение</h2>
  <p>Удалить пост?</p>
  <button>Отмена</button>
  <button>Удалить</button>
</div>

Аккордеон

<button aria-expanded="false" aria-controls="panel-1">
  Что такое кэш?
</button>
<div id="panel-1" hidden>
  Кэш — быстрые повторные ответы без нагрузки на базу.
</div>

aria-expanded передаёт читалке состояние «раскрыт/свёрнут», aria-controls связывает кнопку с панелью. Чередование показа и скрытия — это обновление атрибута и toggle атрибута hidden.

ℹ️
Прогоните компонент через Tab «от начала до конца» и включите скринридер (NVDA — бесплатный, VoiceOver есть на Mac). То, что можно пройти с клавиатуры и услышать корректно — доступно.
💡
Доступность — это навык «слышать интерфейс», а не список тегов. Паттерны уроков 15 и 41 закрывают львиную долю задач коммерческих интерфейсов.