Кратко
СкопированоРоль окна alertdialog
нужна для диалогового окна с важной информацией. Обычно это модальные диалоговые оповещения. Они прерывают действия пользователей и показывают важные сообщения, которые можно принять или отклонить. Например, согласен ли пользователь удалить данные или подтверждение о переводе денег.
Пример
СкопированоДиалоговое окно со срочным сообщением:
<dialog role="alertdialog" aria-labelledby="label" id="my-dialog" onclick="window['my-dialog'].showModal()"> <h3 id="label">Ошибка оформления заказа</h3> <p> Мы не смогли обработать заказ. Пожалуйста, проверьте ваши данные и убедитесь, что на счёте достаточно денег. </p> <form method="dialog"> <button>Понятно</button> </form></dialog>
<dialog role="alertdialog" aria-labelledby="label" id="my-dialog" onclick="window['my-dialog'].showModal()" > <h3 id="label">Ошибка оформления заказа</h3> <p> Мы не смогли обработать заказ. Пожалуйста, проверьте ваши данные и убедитесь, что на счёте достаточно денег. </p> <form method="dialog"> <button>Понятно</button> </form> </dialog>
Скринридеры прочитают демку примерно так: «Ошибка оформления заказа, диалог. Пожалуйста, проверьте ваши данные и убедитесь, что на счёте достаточно денег. Понятно, кнопка».
Как пишется
СкопированоДобавьте к тегу role
, лучше к <div>
или <dialog>
. Благодаря этой роли пользователи вспомогательных технологий поймут, что содержимое такого элемента отделено от остального содержимого страницы.
Сделайте диалоговое окно со срочным сообщением модальным с помощью aria
. Так пользователи поймут, что пока окно открыто, они не могут взаимодействовать с остальным содержимым.
Добавьте внутрь окна хотя бы один элемент, на который можно сделать фокус. Обычно это кнопка с текстом «Хорошо» или «Принять». При открытии окна фокус должен быть на этом элементе.
Чтобы диалоговое окно стало доступным, нужно ещё:
- обязательно добавить имя — краткое название элемента;
- поработать над фокусом с клавиатуры;
- добавить нужные стили для самого окна и элементов вокруг.
Добавьте подпись для диалогового окна с помощью aria
, когда в нём есть видимый заголовок. Для визуально скрытого заголовка используйте aria
.
<div role="alertdialog" aria-labelledby="label"> <h3 id="label">Ошибка оформления заказа</h3> <!-- Остальное содержимое окна--></div>
<div role="alertdialog" aria-labelledby="label" > <h3 id="label">Ошибка оформления заказа</h3> <!-- Остальное содержимое окна--> </div>
<div role="alertdialog" aria-label="Ошибка оформления заказа"> <!-- Остальное содержимое окна--></div>
<div role="alertdialog" aria-label="Ошибка оформления заказа" > <!-- Остальное содержимое окна--> </div>
У диалогового окна может быть дополнительное описание. Оно пригодится в окнах с названиями, которые не до конца раскрывают их содержимое. Описания связывают через aria
.
<div role="alertdialog" aria-labelledby="label" aria-describedby="description"> <h3 id="label">Эй, осторожнее там!</h3> <p id="description"> Вы пытаетесь удалить свой аккаунт из нашей замечательной соцсети. Уверены? </p> <button>Отменить удаление</button></div>
<div role="alertdialog" aria-labelledby="label" aria-describedby="description" > <h3 id="label">Эй, осторожнее там!</h3> <p id="description"> Вы пытаетесь удалить свой аккаунт из нашей замечательной соцсети. Уверены? </p> <button>Отменить удаление</button> </div>
Если использовать HTML-тег <dialog>
, не придётся делать большинство из этих шагов.
Пример модального окна с важным сообщением из Руководства по авторским ARIA-практикам (APG).
Управление фокусом
СкопированоКогда пользователь открывает диалоговое окно, в фокусе может оказаться:
- первый интерактивный элемент;
- кнопка для закрытия окна с текстом «Закрыть», «Нет» и другими вариантами названий;
- первый параграф, если в окне большой текст.
Когда пользователь закрывает окно, верните фокус на кнопку, которая его открыла. Если кнопка исчезает, установите фокус на следующем элементе после неё.
Дополнительно диалоговые окна должны закрываться при нажатии на Esc. Также хорошая практика поддерживать закрытие окна по клику на странице вне его области.
Как понять
Скопированоalertdialog
объединяет роли alert
и dialog
. Это тип диалогового сообщения, которое рассказывает о чём-то важном как alert
, но при этом требует ответа пользователя.
Если у важного сообщения или предупреждения нет интерактивных элементов и это простой текст, используйте роль alert
или aria
. Такие сообщения встречаются в интерфейсах чаще, чем диалоговые окна со срочными сообщениями.