我具有以下结构
<h2>
<svg viewBox='-5 -40 100 50'>
<!-- some filters that get applied on the elements below -->
<clipPath id='c'>
<text id='t'>Scooby</text>
</clipPath>
<g clip-path='url(#c)'>
<rect x='-5' y='-40' width='100%' height='100%'/>
<path/>
</g>
<use xlink:href='#t'/>
<use xlink:href='#t'/>
</svg>
</h2>
如何确保屏幕阅读器只能看到text
(“ Scooby”)中的clipPath
??
我知道屏幕阅读器应读取SVG text
,但是当它位于clipPath
元素中时,是否仍然如此?那么use
的副本呢?
我正在使用此结构,以便在标题文本上获得一些奇特的效果(想像stuff like this)(并抛弃当前使用的.jpg图像)。
答案 0 :(得分:4)
使用aria-hidden
从屏幕阅读器中删除SVG,并使用h2
为aria-labelledby
定义标签。
<h2 aria-labelledby="t">
<svg viewBox='-5 -40 100 50' aria-hidden="true">
<!-- some filters that get applied on the elements below -->
<clipPath id='c'>
<text id='t'>Scooby</text>
</clipPath>
<g clip-path='url(#c)'>
<rect x='-5' y='-40' width='100%' height='100%'/>
<path/>
</g>
<use xlink:href='#t'/>
<use xlink:href='#t'/>
</svg>
</h2>
答案 1 :(得分:0)
将aria-hidden
添加到suppress屏幕上有关特定元素的屏幕上,它将仅读取一次“ Scooby”:
<h2>
<svg viewBox='-5 -40 100 50'>
<!-- some filters that get applied on the elements below -->
<clipPath id='c'>
<text id='t'>Scooby</text>
</clipPath>
<g clip-path='url(#c)'>
<rect x='-5' y='-40' width='100%' height='100%'/>
<path/>
</g>
<use aria-hidden="true" xlink:href='#t'/>
<use aria-hidden="true" xlink:href='#t'/>
</svg>
</h2>
答案 2 :(得分:0)
aria-label
属性旨在在屏幕上看不到文本时使用
<h2 aria-label="Scooby">
<svg> ... </svg>
<h2>
或者,我相信大多数屏幕阅读器都会使用<title>
SVG元素。
<h2>
<svg>
<title>Scooby logo</title>
...
</svg>
<h2>
您还可以选择使用其他ARIA属性,例如aria-labelledby
。