aria-modal
Казва на помощните технологии да третират останалата част от страницата като неактивна докато диалогът е отворен. Задайте на "true" върху role="dialog" или role="alertdialog". Не прави фона наистина неактивен — свържете с атрибута inert или капан за фокус.
Кога да се използва
Върху елемент role="dialog" или role="alertdialog", който трябва да блокира взаимодействието с останалата част от страницата докато е отворен. Задайте aria-modal="true", така че екранният четец да ограничи виртуалния си курсор до диалога и да обяви фоновото съдържание като недостъпно.
Един модален диалог има три отговорности:
aria-modal="true"— казва на помощните технологии, че е модален.- Неактивен фон — прилага се чрез атрибута
inertвърху заобикалящото съдържание или чрез управляван от JavaScript капан за фокус. Без това клавиатурните потребители могат да излязат с таб извън диалога. - Начален фокус — премества фокуса в диалога при отварянето му и го възстановява към тригера при затварянето му.
aria-modal самостоятелно покрива страната на екранния четец; той не спира клавиатурен потребител от преминаване с таб покрай диалога. Поддръжката на браузърите за извеждане на неактивност от aria-modal е непоследователна, затова винаги ги комбинирайте.
Нативният HTML елемент <dialog> с .showModal() обработва и трите автоматично. Предпочетете го, когато е приложимо.
Как да се поддържа синхронизиран
Валидните стойности са "true" и "false". Изобразете "true" докато диалогът е отворен; премахнете атрибута или задайте "false" докато е затворен (обикновено затвореният диалог изобщо не е в DOM, така че атрибутът е без значение).
aria-modal се свързва с два атрибута за означаване:
aria-labelledby="<dialog-title-id>"— сочи към видимото заглавие.aria-describedby="<dialog-body-id>"— незадължителен, за кратко описание.
Заедно те дават на екранния четец последователно начално обявяване: „Диалог, Изтриване на акаунт?, Това действие не може да бъде отменено.”
Чести грешки
aria-modal="true"без никакъв капан за фокус — клавиатурните потребители преминават с таб във фона.- Използване на
aria-modalвърху немодален popover или tooltip. Използвайтеrole="dialog"само за истински модални диалози; popover не е диалог. - Липсващ
aria-labelledby— екранният четец обявява „Диалог” без наименование. - Пропускане на преместването на фокуса в диалога при отварянето му.
- Пропускане на възстановяването на фокуса към оригиналния тригер при затварянето му.
- Маркиране на фона с
aria-hidden="true"вместо сinert— клавиатурният фокус все още излиза; само курсорът на екранния четец е ограничен. - Два едновременно отворени модала с
aria-modal="true". Дървото на достъпността се обърква; показвайте по един в даден момент.
Пример
<div
role="dialog"
aria-modal="true"
aria-labelledby="confirm-title"
aria-describedby="confirm-body"
>
<h2 id="confirm-title">Delete account?</h2>
<p id="confirm-body">This action cannot be undone.</p>
<button type="button" autofocus>Cancel</button>
<button type="button">Delete</button>
</div>