Как правильно добавлять изображения в html, соблюдая правила доступности веб-сайтов - PullRequest
0 голосов
/ 18 марта 2020

В настоящее время я изучаю рекомендации по обеспечению доступности веб-сайтов, касающиеся HTML5.

В отношении изображений , в настоящее время я добавляю изображения в HTML следующим образом:

<!-- Normal Images -->
<img src="https://placeholder.pics/svg/300x300" title="Image Placeholder" alt="Image Placeholder" aria-labelledby="Image Placeholder" width="300" height="300">

<!-- Decorative images -->
<img src="https://placeholder.pics/svg/100x100" role="presentation" aria-hidden="true" alt="" width="100" height="100">

Мои вопросы:

  1. Полезно ли добавлять теги aria-lablleby и alt вместе для обычных изображений? или есть лучшая практика, которую я должен принять.
  2. Нужно ли добавлять role="presentation", aria-hidden="true" и alt="" к каждому декоративному изображению? Все трое должны go вместе? или только один из них? (если только один или два из них, то какие?)

1 Ответ

2 голосов
/ 18 марта 2020

Полезно ли добавлять теги aria-labelledby и alt вместе для обычных изображений? или есть лучшая практика, которую я должен принять.

aria-labelledby

Нет, фактически добавление aria-labelledby и alt вместе приведет к тому, что некоторые программы чтения с экрана будут читать имя дважды. Просто используйте атрибут alt, вот для чего он нужен, он имеет самую широкую поддержку (100%) и прекрасно справится с этой задачей.

Также aria-labelledby требуется как минимум один элемент в DOM, который содержит текст, вы ссылаетесь на него по идентификатору. Вы можете иметь более одного ярлыка только для справки. Он предназначен для использования с другими элементами, которые не могут быть помечены с помощью semanti c HTML, на самом деле не для изображений (всегда есть исключения, но они редки, и это общее руководство).

например,

<span id="ID1">Read First</span>
<span id="ID2">You can add a second label that will be read second</span>
<div aria-labelledby="ID1 ID2"></div>

атрибут заголовка

Также не используйте атрибут title, если только вы не планируете сделать его таким же, как атрибут alt. В противном случае пользователи мыши могут по-разному воспринимать пользователей программ чтения с экрана, поскольку атрибут title недоступен большинству программ чтения с экрана. Посмотрите этот подробный ответ, который я дал об атрибуте title и о том, как развернуть доступную версию, если вы хотите ее использовать.

пример доступного изображения

Итак Ваше окончательное, доступное изображение будет выглядеть так: -

<img src="https://placeholder.pics/svg/300x300" alt="Image Placeholder" width="300" height="300">

Идеально доступно и легко поддерживается.

Нужно ли добавлять role = "presentation", aria-hidden = "true" и alt = "" к каждому декоративному изображению? Все трое должны go вместе? или только один из них? (если только один или два из них, то какие?)

атрибут alt

Все, что вам нужно сделать, это добавить пустой атрибут alt. Обратите внимание, как я сказал пустой и не нулевой. например, alt="" НЕ просто alt. Использование alt в качестве нулевого атрибута приведет к тому, что некоторые программы чтения с экрана будут его игнорировать, поэтому имя файла будет считано.

role = "presentation"

Для полноты можно добавить role="presentation" но это не добавит никакой дополнительной поддержки, насколько я знаю.

С учетом вышесказанного я лично добавляю role="presentation" к декоративным изображениям, так как наше модульное тестирование помечает все пустые атрибуты alt, если это не добавлено. Это было обдуманное решение, поэтому, когда мы запускаем тесты, мы не проверяем правильность пустых атрибутов alt.

Поскольку поддержка пустых атрибутов alt также составляет 99/100%, она также совершенно допустима и доступна только для использования alt="".

aria-hidden

Единственное место (ну, главное, всегда есть исключения), где вы хотите использовать aria-hidden на внешнем изображении, это если вы собираетесь динамически скрывать и показывать его. Некоторые программы чтения с экрана отслеживают изменения WAI-ARIA лучше, чем изменения DOM.

aria-hidden и встроенные SVG

Я бы порекомендовал добавить aria-hidden="true", role="presentation" и focusable="false" для встроенных SVG, которые являются чисто декоративными, хотя Inte rnet Explorer иногда может разрешить они должны быть сосредоточены.

Обратите внимание, что вы все равно не используете атрибуты alt для встроенных SVG.

примеры декоративных изображений

Таким образом, ваше окончательное декоративное изображение будет: -

<!--all image types loaded externally using `img` including SVGs-->
<img src="https://placeholder.pics/svg/100x100" alt="" width="100" height="100">
<!--exception for inline SVGs due to focus bug in IE-->
<svg aria-hidden="true" role="presentation" focusable="false">...</svg>

заключительная заметка о WAI-ARIA

WAI-ARIA предназначена для предоставления информации, когда для этого нет способа semanti c.

Добавление дополнительной WAI-ARIA all на самом деле делает доступность хуже. Всегда следует начинать с «есть ли собственный способ передачи информации программе чтения с экрана», если есть, то WAI-ARIA не нужен или даже не рекомендуется.

After Thought

Я упомянул встроенные SVG, не использующие атрибут alt , вместо этого вы хотите использовать <title> как часть SVG. Прочтите эту краткую статью о доступных SVG для быстрого обзора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...