Поведение aria-describedby
(например, aria-label
и aria-labeledby
) глубоко зависит от роли элемента, в котором они появляются.
Как вы, возможно, знаете, программы чтения с экрана обычно имеют два «режима» , и это в основном определяется ролью (или семантикой по умолчанию) содержимого.
У меня наверняка были проблемы с объявлением неинтерактивных элементов, если они появляются в интерактивном ("режиме форм") контенте.
У меня были хорошие результаты при использовании aria-describedby
с модальным контентом. (Поместите атрибут на модальное поле и укажите на текстовые элементы, внутри которых вы хотите объявить, когда модальное окно открывается.) Но я полагаю, это потому, что существует очевидный момент, когда программа чтения с экрана должна делать эти объявления: момент, когда модал открывается.
В случае, когда форма (или другой контейнер "режима форм") всегда присутствует на странице, вы обычно можете читать неинтерактивный контент, используя комбинации клавиш режима обзора, такие как "следующий заголовок" ("Н") на NVDA и JAWS) или «следующий абзац» («P»). Проверьте, достаточно ли этих «запросов» для решения.
Вы также можете поэкспериментировать со стандартными элементами HTML fieldset
и legend
, целью которых является предоставление текстового описания для групп интерактивных элементов.
Также подумайте о том, чтобы рассматривать «форму» (или панель инструментов или что-то еще) как одну точку табуляции и использовать клавиши со стрелками для навигации по компонентам внутри. Таким образом, когда вы сосредотачиваетесь на контейнере, вы должны получить объявление о том, что aria-describedby
(или действительно aria-labeledby
/ aria-label
)
Если это не работает для вас, есть пара хаков, которые вы можете попробовать в крайнем случае:
- Поместите
tabindex="-1"
на элемент, окружающий текст, который вы хотите
объявил, а затем позвоните focus()
на этот элемент в соответствующем
момент.
- Скопируйте текст в текстовое содержимое области
aria-live
с javaScript в соответствующий момент.
Ни один из этих хаков не хорош и может не подойти вам, если нет «подходящего момента». (Нет эквивалента onfocus
для режима просмотра). Но с небольшой осторожностью их можно заставить работать.