Как создать модальное окно От Редакция techrocks.ru / 19.01.2025 Перевод статьи “How to Build an Accessible Modal – with Example Code”. Мы часто используем модальные или всплывающие окна для отображения важной информации или побуждения пользователей к действию. В отличие от обычных всплывающих окон, которые могут открываться в новых окнах или вкладках, эти диалоги удерживают пользователя на одной странице, накладываясь на существующий контент. Благодаря этому пользователи не отвлекаются от выполнения поставленной задачи. Модальные окна довольно часто используются на сайтах, порой без них не обойтись. Но если они реализованы неправильно, то могут серьезно испортить пользовательский опыт. Такие элементы дизайна должны быть доступными, чтобы ими моли пользоваться все, в том числе люди, применяющие вспомогательные технологии. В этой статье мы создадим модальное окно с учетом рекомендаций по доступности. Необходимые условия Чтобы следовать этому руководству, у вас должны быть: Базовые знания HTML. Нужно понимать, как работают элементы и атрибуты HTML. Базовые знания JavaScript. Знакомство с основными концепциями JavaScript, такими как функции, обработка событий и манипуляции с DOM, будет полезным. Понимание ARIA. Хотя в этом руководстве объясняются роли и атрибуты ARIA, базовое понимание концепций доступности будет не лишним. Когда следует использовать модальные окна? Эффективное использование модальных окон требует внимательного отношения к пользовательскому опыту. Вот несколько рекомендаций, которые помогут вам решить, стоит ли использовать модальные окна: Модальные окна следует использовать, когда пользователю необходимо принять важное решение, например, подтвердить потенциально разрушительное действие (скажем, удаление элемента) или согласиться с условиями и правилами. Вы можете использовать модальное окно, когда задача требует полного внимания пользователя и не зависит от информации с остальной части страницы (например, заполнение формы или завершение процесса оплаты). Модальное окно можно использовать для отображения временной или преходящей информации, которая не должна постоянно отображаться на странице (предупреждения, уведомления или короткие сообщения). Не стоит использовать модальные окна для задач, требующих длительного взаимодействия или ввода, например, для длинных форм или сложных рабочих процессов. Пользователю может быть неудобно работать в модальном окне из-за ограниченного пространства и навигационных ограничений. Не стоит использовать модальные окна для действий, которые пользователь должен выполнять часто. Постоянно всплывающие окна могут раздражать. Не следует использовать модальные окна, если они прерывают естественный ход работы пользователя на сайте, особенно если содержимое или действие в окне не является срочным или важным. Рекомендации по доступности модальных окон Вот несколько советов, которые помогут вам создать полезные и доступные модальные окна: Предусмотрите описательный атрибут aria-labelledby, указывающий на заголовок модального окна. Если заголовка нет, используйте aria-label для создания короткой описательной метки. В модальном окне обязательно должна быть видимая и легкодоступная кнопка закрытия (обычно ее располагают в правом верхнем углу). Четко обозначьте эту кнопку, например, текстом «Закрыть» или значком с aria-label="Закрыть". При открытии модального окна фокус клавиатуры должен перемещаться на первый интерактивный элемент внутри этого окна (обычно это кнопка закрытия). После закрытия модального окна фокус должен возвращаться к элементу, который вызвал модальное окно. Сохраняйте фокус клавиатуры внутри модального окна, пока оно открыто. Предоставляйте пользователям возможность закрывать модальные окна нажатием клавиши Escape. А теперь давайте создадим модальное окно, следуя этим рекомендациям. Я предпочитаю использовать правильные HTML-теги для создания компонентов, и в данном случае я буду использовать тег dialog. Как создать модальное окно с помощью тега dialog Тег dialog появился в HTML5. Он используется для создания диалоговых окон, таких как всплывающие окна, оповещения и модальные окна. Этот тег предлагает встроенные методы и атрибуты, облегчающие управление поведением окна без использования большого количества JavaScript-кода. Встроенные методы JavaScript — это show(), showModal() и close(). show() и showModal() С помощью метода show() можно создать неблокирующее диалоговое окно. Такое окно отображается поверх текущего содержимого, но пользователи могут взаимодействовать с другими частями веб-страницы (нажимать кнопки, ссылки и т. д.), пока окно открыто. Это полезно в ситуациях, когда диалоговое окно предоставляет информацию, которая не требует немедленного внимания пользователя. Вот пример:
Результат: Метод showModal() открывает диалоговое окно в модальном режиме. Это означает, что окно принимает фокус, а взаимодействие с остальной частью веб-страницы блокируется до тех пор, пока окно не будет закрыто. Пользователь не может кликать или как-то иначе взаимодействовать с любой другой частью страницы. В зависимости от браузера за диалоговым окном может появляться полупрозрачный фон, визуально указывающий на то, что с остальной частью страницы невозможно взаимодействовать. Когда диалоговое окно открывается с помощью showModal(), фокус автоматически удерживается внутри окна. Пользователь может переходить к различным элементам внутри диалогового окна с помощью клавиши табуляции, и фокус будет циклически перемещаться по содержимому окна до тех пор, пока оно не будет закрыто. Вот пример:
Результат: Элемент