label id 和 aria-labelledby 在使用上的区别是什么?

4
我知道aria-label和aria-labelledby之间的区别,但以下这些有什么不同,以及何时使用其中之一?代码来自react-testing-library
// first
<label for="username-input">Username</label>
<input id="username-input" />

// second
<label id="username-label">Username</label>
<input aria-labelledby="username-label" />

首先,根据mdn文档,第一个提供了以下功能:

标签文本不仅与相应的文本输入在视觉上相关联;它还与其程序相关联。 ... 您可以单击关联的标签以聚焦/激活输入,以及输入本身。

但是第二个并不为浏览器用户提供该功能,因为它只是辅助功能的ARIA属性。

我还检查了Chrome开发工具-可访问性,并发现第一个和第二个的计算属性显示输入和标签彼此关联。

因此,据我所知,第一个为用户提供了编程访问,而第二个则没有,但是第一个和第二个都可以被屏幕阅读器正确访问。

第二个是否是第一个的子集?因此,由于第一个是第二个的超集,下面的代码模式是否无效?

<label id="username-label" for="username-input">Username</label>
<input id="username-input" aria-labelledby="username-label" />

谢谢。

1个回答

3
从我的角度来看,aria-labelaria-labelledBy的主要区别是:aria-label用于屏幕上不可见的标签文本,而aria-labelledBy用于可见的标签文本。如果需要了解更多关于这两个aria属性的使用情况,可以在此处阅读更多信息。

1
感谢您的帮助!在采纳您的答案之前,我发现第二个答案没有为用户提供点击-聚焦功能。所以我的问题是,第一个答案提供了无障碍性和方便的功能(点击-聚焦),但第二个答案只提供了无障碍性,所以我想知道第一个答案是否是第二个答案的超集。我认为这两者之间确实存在差异。您对此有什么看法? - jwkoo
抱歉,我误解了问题。我已经用正确的解释更新了答案。是的,你是对的,这两者之间有区别。 - Subrato Pattanaik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接