从屏幕阅读器中隐藏伪元素?

问题描述 投票:0回答:4

我正在使用绑定到特定类的

:before
伪元素在
p
标签前面添加符号,CSS如下:

td > p.markerclass1:before {
    position: absolute;
    left: -1rem;
    content: '*';
}

我在 WordPress 主题中使用它,用户可以在编辑器中为

p
标签选择该类,以便将该符号放在当前段落的左侧。

但是,该网站应该是可访问的,并且屏幕阅读器(至少是 NVDA,我正在使用它进行测试)正在读取该伪元素和包含的符号,这是我不想要的。但由于此元素不在 HTML 代码中,因此我无法添加

aria-hidden = 'true'
来将其隐藏,不让屏幕阅读器看到。

知道我可以做什么来让屏幕阅读器忽略这些伪元素吗?

css accessibility pseudo-element screen-readers
4个回答
19
投票

知道这已经很旧了,但最近也必须回答这个问题,最终找到了这个问题的更好答案

伪元素;替代文本可以在

/
:

之后指示
td > p.markerclass1:before {
  position: absolute;
  left: -1rem;
  content: "*";
  content: "*" / ""; 
}

在这种情况下,空白替代文本将导致该内容被忽略。

注意较旧的浏览器不支持此语法,因此请确保首先添加适用于所有浏览器的后备,并且仅被那些也支持此新语法的浏览器覆盖。否则,如果没有这个后备,旧版浏览器只会忽略无法识别的 CSS 行,并且当您使用

/
作为替代文本时无法显示任何内容!


3
投票

您可以尝试使用

speak
属性:

CSS:

td > p.markerclass1:before {
    position: absolute;
    left: -1rem;
    content: '*';
    speak: none;
}

0
投票

伪元素从主类继承它们对屏幕和屏幕阅读器的可见性。

例如,以下代码将隐藏所有内容,包括

*

p:before {content:'*'}
p {display:none}

如果您希望伪元素的内容不被读取,则必须使用不可发音的替换,例如 UTF-8 等效项:

td > p.markerclass1:before {
    position: absolute;
    left: -1rem;
    content: "\2022";
}

编辑:

\2022
用NVDA宣布“子弹”,而另一个代码,例如
\2023
则什么也不宣布


-1
投票

该场景是与“单击此处至”文本关联的“发送邮件”链接,但屏幕阅读器会读取整个文本,但我希望它只读取“发送邮件”。

在这里我已经使用“aria-label”属性解决了这个问题。

a
{
    text-decoration:none;
}
a::before 
{
    content:"Click here to - ";
    color:Black;
    font-weight:bold;
} 
<a href="mailto:[email protected]" target="_top" aria-label="Send Mail">Send Mail</a>

希望这对你们有用。

© www.soinside.com 2019 - 2024. All rights reserved.