Короткий ответ: элементам <input>
нужна какая-то метка, и эта метка должна быть напрямую связана или "привязана" к <input>
.«Близость» не является прямой ассоциацией.То есть, просто потому, что метка «близка» к входу в DOM, это не связывает два элемента вместе.
Некоторые программы чтения с экрана будут пытаться найти какой-либо текст для использования в качестве метки, если он явно не найден, но это обычно подразумевает переход к предыдущему брату <input>
в DOM и если этот брат имееткакой-то текст, связанный с ним, затем относитесь к нему как к метке.Иногда это работает, а иногда нет.Я бы не стал на это полагаться.
Например,
<label>password</label>
<p>should contain upper and lower case letters, a number, and a special character</p>
<input>
В этом случае текст «должен содержать ...» будет считаться меткой ввода, что неверно.Неважно, что до <p>
есть элемент <label>
.В DOM нет ничего, связывающего <label>
с <input>
.Приведенный выше пример должен быть записан как:
<label for="pw">password</label>
<p id="rules">should contain upper and lower case letters, a number, and a special character</p>
<input id="pw" aria-describedby="rules">
Это связывает оба текстовых элемента с вводом.<label>
связывается напрямую через атрибут for
(и идентификатор на <input>
), а описание пароля связывается с помощью aria-describedby
на <input>
.
Так чтопервый выбор маркировки ввода должен быть с нативным HTML, если это возможно.Используйте атрибут for
для <label>
.
Другой способ пометить, как вы заметили, это использование aria-label
или aria-labelledby
на самом <input>
.Хотя это даст вводное доступное имя для программ чтения с экрана, это не поможет зрячим пользователям.aria-label
не видимая вещь.Однако, в вашем случае, похоже, что уже есть визуальный ярлык (даже если он официально не «привязан» к входу).
Итак, чтобы прокомментировать ваши четыре предложения (AD):
* * 1040 A.Вы можете поместить
aria-label
в родительский контейнер, но
<input>
все равно нужно будет указать родительскому элементу, чтобы получить метку, и это сделано с
aria-labelledby
для
<input>
(и потребуется идентификатор народитель, чтобы вы могли указать на него.).
B.Если вы поместите aria-label
непосредственно на <input>
, тогда да, вы должны установить aria-hidden="true"
на видимой метке, в противном случае пользователь программы чтения с экрана может перейти к тексту видимой метки, а затем перейти к вводу и услышать то же самое.Снова текстНо это странное решение.Если текст уже виден, лучше всего поместить идентификатор в видимый текст и связать его с <input>
через aria-labelledby
.
C.Стоит коротко, но нет.
D.Это дружественное место, поэтому все идеи будут рассмотрены, но, пожалуйста, не делайте этого.Не разделяйте пользователей разных типов и не заставляйте людей подписываться на доступный сайт.
Похоже, что ваш основной аргумент в пользу того, что вы не создаете доступное решение, - это размер вашей страницы.Не быть драматичным, но это не выдержит суда.То есть, если ваш сайт в конечном итоге стал ответчиком в судебном процессе, утверждение о том, что вы не реализовали доступность, поскольку не хотели, чтобы загрузка страницы была больше, не будет уважительной причиной.Это просто проблема реализации с вашей стороны.