Скрыть элемент, но сохранить для программ чтения с экрана (нельзя использовать отображение: нет, видимость: скрыто или непрозрачность:0)
У меня есть аудио-элемент в моем HTML, единственная цель которого - сделать объявление для слепых пользователей через программу чтения с экрана. Это DIV, но он невидим для обычных пользователей.
Способ объявить что-то, создав элемент с role=alert
(нет другого способа сделать это, например, нет функции JS, которая напрямую "говорит" с читателем):
<!-- This element can be dynamically added OR shown (via JS) to make a Screen Reader announcement -->
<div role="alert">This will be announced to Screen Readers.</div>
Тем не менее, я не могу, чтобы этот элемент "аудио помощник" был виден обычным пользователям.
1) Не могу использовать display: none
; -> программа чтения с экрана не поднимет его
2) Не могу использовать visibility: hidden;
-> программа чтения с экрана не поднимет его
3) Не могу использовать opacity: 0;
-> потому что место занято, расположение должно быть точно таким же
Я нашел это решение: /questions/7318591/kak-skryit-elementyi-ne-zanimaya-ih-mesto-na-stranitse/7318598#7318598
div {
position: absolute;
left: -999em;
}
Это прекрасно работает, это решает мою проблему. Но это немного взломать. Я хотел спросить: есть ли лучший, более стандартный способ решения этой проблемы?
2 ответа
Я не уверен, что это "лучший" способ, но это скроет его на месте.
div {
overflow:hidden;
height:0;
width:0;
}
Обычной практикой является использование CSS, чтобы визуально скрыть элемент, но позволить пользователям быть доступными для чтения с экрана. Это не обязательно считается "взломать".
Требуется больше свойств CSS, чем вы пытались. Смотрите Что такое sr-only в Bootstrap 3? для деталей.
Также вы можете искать "визуально скрытый" класс.
И то и другое sr-only
а также visually-hidden
являются общими именами, используемыми для именования класса, который визуально скрывает элементы.
Кроме того, ваше понимание role="alert"
не совсем точно.
Чтобы объявить что-то, нужно создать элемент с ролью =alert (другого способа сделать это нет, например, нет функции JS, которая напрямую "говорила бы" с читателем):
role="alert"
имеет неявное aria-live="assertive"
, Элементы с aria-live
объявит об изменениях этого элемента для программ чтения с экрана. Он не будет автоматически объявлять этот элемент. Например,
<div id="foo" aria-live="polite"></div>
<button onclick="document.getElementById("foo").innerHTML = 'hello'">update</button>
Когда я нажимаю на кнопку, текст будет вставлен в
В общем, вы хотите использовать aria-live="polite"
и не aria-live="assertive"
, Когда вы используете role="alert"
, ты получаешь aria-live="assertive"
,
Так что, если ваша страница обновляет свое содержимое, то с помощью aria-live
это правильная вещь. Но это не вызывает объявления о том, что ваша страница загружена.
У пользователя программы чтения с экрана есть много способов навигации по веб-сайту с помощью клавиш быстрой навигации, определенных в программе чтения с экрана (например, H, чтобы перейти к следующему заголовку [h1, h2, h3 и т. Д.], Или T, чтобы перейти к следующей таблице, или L, чтобы перейти к следующему списку и т. Д.), Если ваш HTML использует семантические элементы (такие как