
aria-label 属性用于为元素提供一个可访问的名称(accessible name),当元素的可见文本内容不足以或不适合作为其名称时,aria-label 提供了一种替代方案。然而,对于像 h1 到 h6 这样的 html 标题元素,它们本身就具有强大的语义和默认的无障碍性。屏幕阅读器能够自动识别这些元素作为页面结构中的标题,并将其内部的文本内容作为其可访问名称进行播报。
当在 h1-h6 元素上直接使用 aria-label 时,通常会被 Nu HTML Checker 等工具标记为“可能误用 aria-label”。这主要是因为:
因此,最佳实践是避免在 h1-h6 元素上使用 aria-label,除非有非常特殊且经过深思熟虑的场景,且确信它不会引入无障碍性问题。
在现代网页设计中,为了实现独特的视觉效果,标题可能不再是简单的文本字符串,而是由多个视觉元素(如单个字符的动画、SVG 图形等)组合而成。在这种情况下,虽然视觉上呈现了一个标题,但其内部的 DOM 结构可能不包含屏幕阅读器可以直接识别的连续文本。
例如,以下代码展示了一个由多个 <span> 包裹的单个字符以及 SVG 组成的动画标题:
立即学习“前端免费学习笔记(深入)”;
<h3 aria-label="Contact">
<span aria-hidden="true" class="char-wrapper">c
<svg class="char-svg char--c">
<use xlink:href="#char--c"></use>
</svg>
</span>
<span aria-hidden="true" class="char-wrapper">o
<svg class="char-svg char--o">
<use xlink:href="#char--o"></use>
</svg>
</span>
<!-- 更多字符和SVG -->
<span aria-hidden="true" class="char-wrapper">t
<svg class="char-svg char--t">
<use xlink:href="#char--t"></use>
</svg>
</span>
</h3>在这个例子中,虽然 aria-label="Contact" 似乎解决了屏幕阅读器的问题,但它触发了 Nu HTML Checker 的警告,因为它违背了 h3 元素的语义使用原则。同时,每个用于视觉效果的 <span> 都设置了 aria-hidden="true",这确保了屏幕阅读器会忽略这些装饰性元素。
为了在保持 h1-h6 元素原生语义的同时,为屏幕阅读器提供正确的文本内容,并兼顾复杂的视觉设计,推荐使用 sr-only(Screen Reader Only)模式。这种方法的核心思想是:在标题元素内部放置一段包含实际文本内容的 <span>,并为其应用 CSS 样式,使其在视觉上隐藏,但对屏幕阅读器保持可见。
以下是修改后的 HTML 结构和相应的 CSS 样式:
HTML 结构:
<h3 class="visually-complex-heading">
<!-- 仅供屏幕阅读器访问的文本内容 -->
<span class="sr-only">Contact</span>
<!-- 视觉上呈现的动画或复杂结构,对屏幕阅读器隐藏 -->
<span aria-hidden="true" class="char-wrapper">c
<svg class="char-svg char--c">
<use xlink:href="#char--c"></use>
</svg>
</span>
<span aria-hidden="true" class="char-wrapper">o
<svg class="char-svg char--o">
<use xlink:href="#char--o"></use>
</svg>
</span>
<span aria-hidden="true" class="char-wrapper">n
<svg class="char-svg char--n">
<use xlink:href="#char--n"></use>
</svg>
</span>
<span aria-hidden="true" class="char-wrapper">t
<svg class="char-svg char--t">
<use xlink:href="#char--t"></use>
</svg>
</span>
<span aria-hidden="true" class="char-wrapper">a
<svg class="char-svg char--a">
<use xlink:href="#char--a"></use>
</svg>
</span>
<span aria-hidden="true" class="char-wrapper">c
<svg class="char-svg char--c">
<use xlink:href="#char--c"></use>
</svg>
</span>
<span aria-hidden="true" class="char-wrapper">t
<svg class="char-svg char--t">
<use xlink:href="#char--t"></use>
</svg>
</span>
</h3>CSS 样式:
/* 隐藏类,使内容仅对屏幕阅读器可见,但视觉上不可见 */
/* "sr" 意为 "screen-reader" */
.sr-only:not(:focus):not(:active) {
clip: rect(0 0 0 0);
clip-path: inset(50%);
height: 1px;
overflow: hidden;
position: absolute;
white-space: nowrap;
width: 1px;
}解释:
通过这种方法,h3 元素的可访问名称将由其内部的 .sr-only <span> 提供,屏幕阅读器会正确地播报“Contact”,同时页面的视觉设计得以保留,并且避免了 Nu HTML Checker 的警告。
在构建无障碍性友好的网页时,遵循以下原则至关重要:
通过采纳这些实践,开发者可以构建出既具有吸引力又对所有用户(包括使用辅助技术的人群)都可访问的网页体验。
以上就是HTML 标题元素与 aria-label 的正确使用:避免无障碍性陷阱的详细内容,更多请关注php中文网其它相关文章!
HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号