Originally posted on https://dear-dia11y.com/image-with-svg-source-voiceover-bug.html
Dear dia11y,
I recently documented an issue where some decorative illustration <img /> elements with SVG sources were, when using VoiceOver in macOS Safari, announcing every <g> (group) element by narrating the word "image". Here's what the HTML essentially was:
<img
alt=""
class="foo"
src="path/to/file.svg"
/>
The alt="" should have alerted the screen reader that this was a decorative image, but no matter — let's add aria-hidden="true" to it.
I recommended this issue and possible fix to a colleague and forgot about it.
This colleague read up on role="presentation" versus aria-hidden="true" and whatnot and eventually discovered that neither solved the problem! What a mystery.
This person did some digging and discovered that image elements with SVG sources that aren't marked as role="img" can have VoiceOver jump into the SVG document and start reading things.
The fix?
<img
alt=""
class="foo"
role="img"
src="path/to/file.svg"
/>
That's it! HTML and a11y linters will complain about the repetitive role, but we do what we have to do.
It also turned out that this was a problem with non-decorative images. Image alternative text was being read along with the innards of SVG sources (even <text> elements!).
Here are some nicely documented test cases of the issue:
Yours,
Robert W. Pearce
Top comments (0)