我有以下代码:
<h2>
Deadpool
<svg width="53" height="64" class="inline" aria-label="and">
<use href="#oleo-ampersand"></use>
</svg>
Wolverine:<br>
A StackOverflow Example
</h2>
“&”符号的样式如下:
现在,我想让屏幕阅读器将其叙述为常规短语(即“死侍和金刚狼”)。添加aria-label="and"
到<svg>
似乎被忽略了。有办法实现这一点吗?也许,我应该制作整个块aria-hidden
并添加一个视觉上隐藏的元素?
此外,如果能以相同的方式复制块就太酷了Ctrl+C
,但我猜如果没有 JS 拦截这是不可能的。
不使用 JS 来复制文本确实不是一件容易的事。
这个标记在屏幕阅读器上对你有用吗?
您还可以将该类仅应用于带有文本内容“and”的
.sr-only
隐藏。<span>
如果您的 SVG 不包含任何文本元素,您甚至可以省略该
aria-hidden
属性。为了避免复制文本时出现浏览器不一致的情况,我们可以:
aria-hidden="true"
SVG 元素(包含 & 符号)<span>
您也可以使用应用了所需字体子集版本的 span(示例 1)。在这种情况下,您需要通过
aria-hidden="true"
以下方式应用并使其不可选择:user-select:none
常用的
sr-only
规则确保文本仍然可被屏幕阅读器读取和选择 - 尽管对于视力正常的用户而言是不可见的。此技术的主要技巧是通过多个属性使元素不可见,而无需应用disply:none
或,visibility:hidden
因为两个属性都会将内容从可访问性树中删除。另请参阅“A11Y 项目:隐藏内容”
SVG 到字体的转换
如果您的内联 SVG 图形不可用作字体 - 您也可以使用SVG 到字体生成器(如icomoon或fontello)将您的资产转换为图标字体。
子集
如果您的字体服务不支持子集,您也可以使用transfonter之类的服务进行转换。它还有一个选项可以生成字体资源的 base64 编码 dataURL。
是的,从可访问性树中删除 svg,并添加单词“and”作为视觉隐藏文本。
另外,请注意,我删除了
br
“Wolverine”之后的元素,而是将第一行内容包裹在一个 span 中,并将其显示为 block,以获得所需的换行符。在浏览模式下,如果您使用该元素br
强制换行,某些屏幕阅读器会将标题读作两个单独的标题,因此这是一种礼貌的做法,可以防止这种情况发生。