【问题标题】:Is [h6 aria-level="7"] a reliable way to create a [h7] element?[h6 aria-level="7"] 是创建 [h7] 元素的可靠方法吗?
【发布时间】:2019-04-28 14:02:48
【问题描述】:

通常,HTML 标题在变为无效之前只能上升到 <h6>。据我所知,以下是在 HTML 中创建 <h7> 元素的完全有效的方法:

<h6 aria-level="7">This is a heading level 7 element</h6>

我已经在 NVDA 中的 Chrome、Firefox 和 Internet Explorer 中对此进行了测试,它可以按预期工作。

不过,我真的无法访问任何其他屏幕阅读器。可以访问大量屏幕阅读器/浏览器组合的人能否确认上述内容是否始终作为&lt;h7&gt; 元素传达给用户?

如果您知道这种技术肯定不起作用的屏幕阅读器/浏览器组合,请告诉我。

【问题讨论】:

    标签: html accessibility wai-aria html-heading


    【解决方案1】:

    虽然&lt;div role="heading" aria-level="7"&gt; 似乎是定义 H7 元素的有效方式,但屏幕阅读器并不普遍认为它像 H1-H6。 我至少可以确认它不适用于 Jaws。用 Jaws 就更糟了,被当成 H2 了!

    在 Firefox、chrome 和 IE11 上使用 Jaws 测试。 还使用级别 8、9、10、11 和 12 进行了测试。使用 X&gt;6 指定 aria-level="X" 总是会将其转换为 H2。

    所以,不要用这个技巧来制作一种 H7 元素。它没有得到普遍支持。

    您最好重新考虑一下您的网页结构。你真的需要 7 个级别的标题吗? 人们常说,一份好的文档不应该超过3个级别,很长或很重的技术文档可能有4个,特别是5个。鉴于H1的特殊地位,我们再加一个。所以,6级肯定绰绰有余。

    你没有跳过一些关卡吗? 跳过标题级别在语义上是不正确的,您不应该仅仅因为视觉外观而这样做。

    事实上,the ARIA specification 从未明确声明允许指定高于 6 的级别。 aria-level 的默认值为 2。这解释了 Jaws 在遇到 aria-level 无效值时的合法行为。

    【讨论】:

    • 谢谢。当我问这个问题时,这就是我所追求的。有人测试屏幕阅读器并发现它不起作用。虽然因为它是一个技术上有效的选项,但这是一个应该向 Jaws 反驳的错误。
    • 想要h7 的原因主要是为了标记分段元素,但还有其他方法可以避免使用h7
    • 这是一个错误,应该反驳给 Jaws => 不,这不是一个错误,根据 ARIA 规范,Jaws 的解释是有效的。请参阅我的更新答案。
    • W3C 已在此处正式记录,因此存在错误。 w3.org/TR/WCAG20-TECHS/ARIA12.html#ARIA12-ex2
    【解决方案2】:

    [h6 aria-level="7"] 是创建 [h7] 元素的可靠方法吗?

    没有。

    这违背了second rule of ARIA

    不要改变原生语义,除非你真的必须这样做。

    如果你想定义一个新的标题级别,你应该使用

    &lt;div role="heading" aria-level="7"&gt;

    参见 WAI ARIA 示例:

    This example demonstrates how to implement a level 7 heading using role="heading" and the aria-level attribute. Since HTML only supports headings through level 6, there is no native element to provide these semantics.

    编辑: WCAG 规范中的另一个示例 ARIA12: Using role=heading to identify headings(感谢 @Daniel-tonon 指出这一点)

    请注意,无论您使用 h6 还是 div,JAWS 都无法支持 6 以上的任何 aria-level(请参阅 @QuentinC 答案)

    【讨论】:

    • 通过使用&lt;h6&gt;,它已经隐含了role="heading"。通过标记查看&lt;h6&gt;&lt;div&gt; 更容易识别为标题。我认为简单地调整 aria 级别没有问题。 “除非你真的必须”,如果我的标题用完了,那么是的,我真的必须。
    • 这实际上并不是对所提问题的回答。
    • &lt;div role="heading" aria-level="7"&gt; 如何不改变原生语义? &lt;div&gt; 本身没有语义,因此赋予它语义会继承地改变其语义。
    • @DanielTonon 我回答了您的问题并编辑了我的答案以更准确。不,这不是一个可靠的方法。是的,div 没有强语义,所以它接受任何角色。
    • 感谢您的链接。它至少证实了我试图提出的主要问题,“h7 是否可能”。在接受“否”作为答案之前,我希望看到 h6 不能在屏幕阅读器/浏览器组合中工作的证据。
    猜你喜欢
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    • 2013-02-19
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多