Если у вас нет возможности изменить сам элемент <svg>
, самый простой подход - обернуть его в DIV с ролью ARIA img
и использовать aria-label
для предоставления альтернативы текста:
<div class="svg-wrapper" role="img" aria-label="A cowboy riding a triceratops">
<svg role="img" aria-labelledby="title desc" ... >
<rect x="0" y="0" width="116" height="140" ... ></rect>
<!-- more SVG elements -->
</svg>
</div>
Семантически <div role="img" aria-label="foo">
эквивалентно <img src="foo.png" alt="foo">
.Вы можете найти пример в Тег IMG и ARIA role = атрибут / значение img .
Обратите внимание, что роль ARIA img
определяется как имеющая " children presentational", что означает, что браузер не должен передавать содержимое, вложенное в DIV, вспомогательным технологиям.Поэтому тот факт, что вложенный SVG имеет свою собственную роль изображения и поврежденный атрибут aria-labelledby
, не должен иметь значения.
Если вы можете контролировать содержимое элемента <svg>
, тогда этот шаблон будет работать:
<div class="svg-wrapper">
<svg role="img" aria-labelledby="unique-id-123" ... >
<title id="unique-id-123">A cowboy riding a triceratops</title>
<rect x="0" y="0" width="116" height="140" ... ></rect>
<!-- more SVG elements -->
</svg>
</div>
Будьте осторожны, чтобы элементу <title>
был присвоен уникальный идентификатор.