WCAG和屏幕阅读器 - 标签a 与 标签,并没有标签读两次

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

我已经将一些网站纳入WCAG 2.1 AA合规性。为了便于导航,我将页面内容分成相关的<section>标签,并提供了一个<h>标签,以允许屏幕阅读器通过地标和标题进行导航。然后我使用<h>作为<section>的标签,使用aria-labelledby。问题是,至少在使用NVDA的Chrome中,当通过地标或标题导航时,它会读出标签两次。如果我从<section>中删除了aria-labelledby,它会跳过该部分。

我的标签是否过于热心,或者是否有一些预期的冗余?我不想删除<h>标签(它们是视觉上隐藏的,仅供屏幕阅读器使用),因为有些人可能更喜欢浏览标题。

我可以将<h>移动到<section>的底部,然后NVDA只读取实际内容的第一行。这样做很有意思,但我不喜欢像这样构建DOM。 (另外屏幕阅读器会遇到底部的标题,这很令人困惑。)

有没有办法让标签只读一次,当它是<section>标签中的第一段内容时?

html wai-aria wcag2.0
1个回答
0
投票

所以你有这样的东西?

<section aria-labelledby="h2id">
  <h2 id="h2id">hello</h2>
  <!-- other stuff -->
</section>

当我使用NVDA(D键)通过地标导航时,Chrome和Firefox都会说“hello region,hello,heading level 2”

同样,如果我按标题导航(H键),我会听到同样的事情。

那很奇怪。

如果我检查Chrome的devtools中的辅助功能树,<section>显示:

Name: "hello"
  aria-labelledby: "hello"
  aria-label: Not specified
  title: Not specified
Role: region
Labeled by: 

所以看起来是正确的。地标的可访问名称只是“你好”,这正是“Accessible Name and Description Computation 1.1”应该说的。我不确定为什么标题也会被阅读。

iOS上的VoiceOver存在同样的问题。当我通过地标或标题(通过转子)导航时,读取区域和航向。

我没有JAWS,但如果你有权访问它,也可以在那里试试。

我会不管它。 HTML似乎是正确的。考虑到通过地标和标题导航的优势,可能还有一点额外的冗长。

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