我知道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" />
谢谢。