导致无效HTML的SVG可访问性(重复ID)

有一个有趣的蜂巢.我已经做了很多搜索,并没有在S.O.上找到答案.或其他地方.

我正在努力使我们的网站尽可能地可访问,这包括提供非文本内容的替代文本. (WCAG 1.1.1)

到目前为止,我们已经遵循了CSS Tricks和Sitepoint的建议
https://www.sitepoint.com/tips-accessible-svg/
https://css-tricks.com/accessible-svgs/

通过增加:
角色= “IMG”
<标题>
<递减>
和aria-labelledby,并为每个< title>提供一个id.和< desc>

当页面上只有一个特定图标时,这可以解决问题.当我们在页面上多次使用相同的图标时,就会出现问题.因为我们的SVG正在内联,所以我想要< title>和< desc>标签将导致验证错误,这也是可访问性的禁忌. (WCAG 4.1.1)

那么问题就变成了,如何在保持有效HTML的同时使SVG可以访问?我的第一个想法是将标题和描述文本拉到标签上的咏叹调标签上,但那会不会对无视用户读两次?放下咏叹调的标签可以吗?任何帮助深表感谢!

目前完整的SVG代码:

<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="120px" height="120px" viewBox="0 0 120 120" enable-background="new 0 0 120 120" xml:space="preserve" role="img" aria-labelledby="rings-svg rings-svg-desc" class="rings">
  <title id="rings-svg">Ring</title>
  <desc id="rings-svg-desc">An empty circle ring</desc>
  <g>
    <g>
      <path fill="#E5E5E5" d="M60,112.151C31.245,112.151,7.85,88.756,7.85,60C7.85,31.245,31.245,7.851,60,7.851
      S112.15,31.245,112.15,60C112.15,88.756,88.755,112.151,60,112.151z M60,9.426C32.113,9.426,9.425,32.113,9.425,60
      S32.113,110.576,60,110.576S110.575,87.887,110.575,60S87.887,9.426,60,9.426z"></path>
    </g>
    <g>
      <path fill="#E5E5E5" d="M60,117.5C28.295,117.5,2.5,91.705,2.5,60S28.295,2.5,60,2.5s57.5,25.795,57.5,57.5S91.705,117.5,60,117.5
      z M60,4.075C29.163,4.075,4.075,29.162,4.075,60S29.163,115.925,60,115.925S115.925,90.838,115.925,60S90.837,4.075,60,4.075z"></path>
    </g>
  </g>
</svg>

最佳答案 如果你不能改变每个元素中的id,你可以在display:none元素的页面开头插入一次id可访问的替代品:

<div style="display:none">
  <div id="rings-svg">Ring</title>
  <div id="rings-svg-desc">An empty circle ring</desc>
</div>

然后将SVG插入代码中的多个位置

<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="120px" height="120px" viewBox="0 0 120 120" enable-background="new 0 0 120 120" xml:space="preserve" role="img" aria-labelledby="rings-svg rings-svg-desc" class="rings">
  <title>Ring</title>
  <desc>An empty circle ring</desc>
  <g>
    <g>
      <path fill="#E5E5E5" d="M60,112.151C31.245,112.151,7.85,88.756,7.85,60C7.85,31.245,31.245,7.851,60,7.851
      S112.15,31.245,112.15,60C112.15,88.756,88.755,112.151,60,112.151z M60,9.426C32.113,9.426,9.425,32.113,9.425,60
      S32.113,110.576,60,110.576S110.575,87.887,110.575,60S87.887,9.426,60,9.426z"></path>
    </g>
    <g>
      <path fill="#E5E5E5" d="M60,117.5C28.295,117.5,2.5,91.705,2.5,60S28.295,2.5,60,2.5s57.5,25.795,57.5,57.5S91.705,117.5,60,117.5
      z M60,4.075C29.163,4.075,4.075,29.162,4.075,60S29.163,115.925,60,115.925S115.925,90.838,115.925,60S90.837,4.075,60,4.075z"></path>
    </g>
  </g>
</svg>
点赞