WCAG 2.1 建议 于 2018 年发布。现在已经过去几年了,有一些新的成功标准。在本文中,我将讨论 名称中的标签,这是我们如何以视觉方式标记组件。我们将了解一些失败状态的样子、如何修复它们以及如何正确执行它们的示例。
你让我在成功标准上迷茫了……
成功标准是一个可测试的陈述,它与技术无关。它是我们确定工作是否“无障碍”的基线。在这种情况下,“名称中的标签”是正在评估的事物,它属于一大堆其他标准。WCAG 2.1 是规范的当前版本,“名称中的标签”是项目 2.5.3,表示它属于第二类(“可操作”)标准,位于该类别的第五部分(“输入模式”)下,标记为该部分中的第三项。
WCAG 2.1 与 WCAG 2.0 向后兼容,这意味着它是 WCAG 2.0 的扩展。此外,WCAG 2.1 和 2.2 的发布是相互关联的,它们共同起作用。
名称中的标签
所以,回到正题,2.5.3 名称中的标签(级别 A)是 WCAG 2.1 成功标准中新增的定义。以下是它的描述
对于包含文本或文本图像的标签的用户界面组件,名称包含以视觉方式呈现的文本。
此成功标准 (SC) 的目的是确保 **标签在组件上以视觉方式显示的词语也包含在以编程方式与组件关联的词语中。** 这有助于确保任何人,无论是在使用语音识别软件还是视觉健全的人,都可以依靠标签来描述组件的意图或如何与之交互。视觉文本标签和 **编程名称** 不必完全相同,但它们应该包含将它们关联在一起的常用词语(例如,“提交”与“立即提交”)。
重点是由于差异,读取的内容和看到的内容之间不会产生混淆。
辅助技术在行动
让我们以 HTML 联系表单为例。用户可以使用语音识别软件填写表单,并来到表单提交和发送表单的最后一步。
假设按钮的标签和按钮中的视觉文本不一致
<form>
<label>
Message:
<textarea name="message"></textarea>
</label>
<button aria-label="Submit">Send</button>
</form>
在上面的示例中,**按钮对于辅助技术无法正常工作**。按钮包含文本“发送”,但其 aria-label
是“提交”。这就是失败之处。视觉标签(“发送”)与编程名称(“提交”)不一致,两者之间没有关联。
当这些标签匹配或具有共同术语时,语音识别软件的用户可以通过说出链接、按钮和菜单等组件的可见文本标签来进行导航。在这种情况下,我们可以通过匹配标签和文本来解决问题。但由于 aria-label
没有任何附加值,因此完全删除它是一个更好的解决方案
<form>
<label>
Message:
<textarea name="message"></textarea>
</label>
<button>Send</button>
</form>
如果他们听到的文本与他们在屏幕上看到的文本相似,使用屏幕阅读器的有视力用户也会有更好的体验。
当标签和视觉文本不匹配时,尝试使用可见文本标签作为导航手段(例如,“移动到姓氏”)或选择的语音输入用户将陷入困境,因为用户说出的可见标签与启用为语音输入命令一部分的辅助名称不匹配或不是其一部分。
此外,当辅助名称与可见标签不同时,它可能作为隐藏命令发挥作用,语音输入用户可能会 *意外地* 激活它。如果组件不存在可见文本标签,则 SC 不适用。
代码在行动
以下是三种不同的失败状态。
- 一个有问题的
<button>
元素,其中口语标签和视觉标签没有关联。 - 标签不匹配,其中口语文本读取的内容比视觉标签多,因为存在一个“辅助隐藏”的跨度。
- 一个 带有口语标签的输入 通过
aria-labelledby
,无法在口语标签和视觉标签之间建立关联。
同样,根据 2.5.3 名称中的标签 SC,这些都是不良实践的例子。
在 2020 年,WebAIM 百万项目 评估了 420 万个表单输入,发现 55% 的表单输入未正确标记,无论是通过 <label>
, aria-label
还是 aria-labelledby
。
在使用表单时,我们大多数人习惯于将 <label>
与 <input>
或其他一些表单控件配对。这很棒,是指示控件作用的绝佳方法,但控件还具有 **编程名称**,也称为使用 aria-label
的“辅助名称”。
当 <label>
的名称可以与 aria-label
中的编程(或辅助)名称相关联时,我们可以获得更好的用户体验。例如,如果我们使用“姓氏”作为输入的 <label>
,那么我们可能希望 aria-label
也为“姓氏”或类似的东西。**无法在编程名称和可见标签之间建立关联会导致认知障碍的用户遇到更多挑战。** 对于必须记住说出与他们看到的控件上的可见标签不同的语音命令的语音输入用户来说,这需要额外的认知负荷。对于需要吸收和理解无法与可见标签联系起来的语音输出的文本转语音用户来说,也会产生额外的认知负荷。这些表单将提交,但它会对无障碍性和残疾用户造成代价。
以下是上面三个修复过的示例!
标签中的文本细节
根据 WCAG SC,如果文本以象征性的方式使用而不是直接用人类语言表达,则不应将其视为可见标签。富文本编辑器就是一个很好的例子,因为编辑器可能会使用图像作为文本(这包含在 1.4.5 文本图像 中)。

为了将标签文本和辅助名称相互匹配,确定 *哪些* 文本应被视为任何给定控件的任何组件的标签很重要。用户界面中通常存在 *多个* 与控件相关的文本字符串。 有一些原因 说明为什么应该将 **最接近的标签** 视为文本标签。这与为与组件交互的用户建立可预测性模式有关。这些原因表明,可见标签应放置在
- 文本输入、下拉框和其他小部件或组件的左侧。
- 复选框和单选按钮的右侧。
- 按钮或选项卡内部或充当按钮的图标下方。



如果标点符号和大小写以象征性的方式使用,也可以认为是可选的。例如,“姓氏”就可以了,而不是“姓氏:”,而“下一步”也就可以了,而不是“下一步…”,等等。
还要考虑的一件事是:没有可见标签的组件不会被 WCAG SC 考虑。
正确的标签有其好处
将组件的标签与其相应的可访问名称匹配的核心益处是,它使语音输入用户能够激活页面上的控件,而无需更改焦点或在两个不同的术语之间进行猜测。
最终,在视觉显示和语音朗读之间使用清晰一致的术语,可以提供更愉快的用户体验——对所有人都是如此——因为辅助技术读取的标签与可见的标签相匹配,这些标签也可以看到和阅读。这就是我们谈论包容性设计的地方——每个人都获益,没有人被落下。
总结
我们刚刚分解了 WCAG 2.5.3 成功准则中关于名称标签的一些细微之处。听起来很简单,但正如我们所见,有些情况下并不那么明确。
当然,遵守此准则的目标是使我们的工作对所有人来说都是可访问和包容的。WCAG 帮助我们了解是否成功,不仅通过提供指南,还通过设置合规等级(A、AA、AAA,其中 AAA 是最高等级)。标签中的文本属于 A 级,意味着它是基本的合规级别。为了获得该等级,WCAG 需要
我们可以通过查看站点的源代码、使用浏览器的 DevTools(例如 Chrome 或 Firefox)或使用诸如 WAVE 浏览器扩展(Chrome 和 Firefox)和 Deque Systems 的 Axe(Chrome)之类的工具运行可访问性审核来测试并确保我们的代码完整且正确。
简而言之,在玻璃的另一边有真实的人,我们可以通过我们的代码和设计来帮助他们享受与我们制作的组件的互动。标签中的文本只是 WCAG 中概述的众多准则之一,虽然它可能看起来像是一个很小的细节,但遵守它可以对我们的用户产生重大影响。
嘿,伙计们,很棒的文章,谢谢!
我认为关于情况 3 的解决方案不准确,ʼaria-label=”hidden-label”ʼ,也许属性应该是 aria-labelledby
继续努力!
已修复!谢谢!
很高兴在这里看到 WCAG SC 的报道。虽然你在本文的重点内容上很清楚,但我还想补充一点。鉴于我在审核工作中经常看到
placeholder
的使用,我想向读者保证,使用placeholder
本质上是 2.5.3 的自动失败。因此,如果
placeholder
匹配或 是唯一的可见 accName,并且如果其字段可以接受值(通过用户、预先填充、脚本化),那么一旦它消失,你就失败了。关于已修复的 *示例 2* 的一个小的细节:因为用户可能会说“下载规范”(可见文本),但 accName 通过 ARIA 设置为“下载 gizmo 规范”,所以该示例将失败,因为它不是 accName 的子字符串。
这个问题已修复。感谢 Adrian 指出这一点。
不清楚为什么代码片段推荐使用 aria-label / aria-labelledby,而可见标签已经足够了。
例如,
<button id="siteSearch" aria-label="Go">Go</button>
在此处发表评论以表明我之前关于为组件命名而无谓地使用 aria-* 的评论已得到解决。
这个问题也已修复。感谢 Scott。
我对这篇文章感到好奇
标签不匹配,其中语音文本读出的内容比视觉标签多,因为有一个“可访问隐藏”的跨度。
我们知道,在页面上重复的通用链接文本(例如“阅读更多”或“了解更多”)是不好的做法。链接文本应该更具描述性,以便告知屏幕阅读器用户该链接将带您去哪里。为了解决这个问题,我看到有人使用屏幕阅读器专用文本来提供更多细节。阅读更多
<span class="sr-only">关于名称中的标签</span>
。在理想情况下,链接文本应该始终更具描述性,无论设备如何,但我们都知道情况并非如此。那么哪种更糟糕?通用链接标签?还是额外的隐藏文本会大声朗读?或者有没有更好的方法来解决这个问题,而我还没有发现?
Jamie,
我认为通用链接标签和隐藏文本一样糟糕。一个不比另一个更糟。两者都可能让辅助技术感到困惑,根据我的测试经验,尤其是屏幕阅读器和语音识别。
我在工作中找到的解决方法是确保链接尽可能地描述性,并且没有隐藏的链接文本。我想不出任何需要隐藏链接文本的用例,并且使用可见的描述性链接文本对所有人都有帮助。
例如,如果你不能使用“这是指向下一节的链接,该节是关于龙虾的”,那么可以将文本编辑为“转到龙虾部分”或“转到下一节关于龙虾的内容”。