WCAG 和屏幕阅读器 - 用 <h> 标签标记 <section>,并且标签不会被读取两次
WCAG and screen readers - Label a <section> with an <h> tag, and not have the label read twice
我一直在使一些站点符合 WCAG 2.1 AA 合规性。为了方便导航,我将页面内容分成相关的 标签,还提供了一个 标签,以允许屏幕阅读器通过地标和 headers 进行导航。然后我使用 作为 的标签,使用 aria-labelledby。问题是,至少在 NVDA 的 Chrome 中,当按地标或 header 导航时,它会读出标签两次。如果我从 中删除 aria-labelledby,它会跳过该部分。
我是不是对我的标签过于热心了,还是应该有一些冗余?我不想删除 标签(它们在视觉上是隐藏的,仅供屏幕阅读器使用),因为可能有些人更喜欢浏览 headers.
我可以将 移动到 的底部,然后 NVDA 只读取实际内容的第一行。那会有点工作,但我不喜欢那样构建 DOM 。 (再加上屏幕阅读器会在底部遇到 header,这令人困惑。)
有没有办法让标签只被读取一次,当它是 中的第一个内容时它正在标记?
所以你有这样的东西?
<section aria-labelledby="h2id">
<h2 id="h2id">hello</h2>
<!-- other stuff -->
</section>
当我使用 NVDA(D 键按地标导航时,both Chrome 和 Firefox 会说 "hello region, hello, heading level 2"
同样,如果我按标题(H 键)导航,我会听到同样的声音。
真奇怪。
如果我检查 Chrome 的开发工具中的可访问性树, 显示:
Name: "hello"
aria-labelledby: "hello"
aria-label: Not specified
title: Not specified
Role: region
Labeled by:
看起来是正确的。地标的可访问名称只是 "hello",这正是“Accessible Name and Description Computation 1.1”所说的。我不确定为什么标题也被阅读了。
iOS 上的 VoiceOver 也存在同样的问题。当我通过地标或航向(通过转子)导航时,区域和航向都会被读取。
我没有 JAWS,但如果您可以访问它,也可以尝试一下。
我会不理会它。 html 似乎是正确的。考虑到按地标和标题导航的优势,稍微冗长一点可能没问题。
我一直在使一些站点符合 WCAG 2.1 AA 合规性。为了方便导航,我将页面内容分成相关的
我是不是对我的标签过于热心了,还是应该有一些冗余?我不想删除
我可以将
有没有办法让标签只被读取一次,当它是
所以你有这样的东西?
<section aria-labelledby="h2id">
<h2 id="h2id">hello</h2>
<!-- other stuff -->
</section>
当我使用 NVDA(D 键按地标导航时,both Chrome 和 Firefox 会说 "hello region, hello, heading level 2"
同样,如果我按标题(H 键)导航,我会听到同样的声音。
真奇怪。
如果我检查 Chrome 的开发工具中的可访问性树,
Name: "hello"
aria-labelledby: "hello"
aria-label: Not specified
title: Not specified
Role: region
Labeled by:
看起来是正确的。地标的可访问名称只是 "hello",这正是“Accessible Name and Description Computation 1.1”所说的。我不确定为什么标题也被阅读了。
iOS 上的 VoiceOver 也存在同样的问题。当我通过地标或航向(通过转子)导航时,区域和航向都会被读取。
我没有 JAWS,但如果您可以访问它,也可以尝试一下。
我会不理会它。 html 似乎是正确的。考虑到按地标和标题导航的优势,稍微冗长一点可能没问题。