标签 "for" 和输入 "id"

Label "for" and Input "id"

我目前正在为 CMS 开发一个表单模块,以便我们的用户可以创建自己的表单以显示在他们的网站上,我正在努力确保所有这些都可以通过标签等进行访问。

我的问题是,如果你有一个 <label> 对应 <input> 并且 [for] 属性到 link 到输入的 [id][id] 实际上必须 意味着 什么吗?读了吗?还是只是 link 他们?

例如

<label for="input1">Name</label>
<input id="input1" />

<label for="name">Name</label>
<input id="name" />

这些在屏幕上的结果会相同还是不同 reader?

不,从来没有。

如果您将自己置于 idclass 对用户可见的情况下,那么您可能做错了一些可怕的事情,或者您正试图让代码透明度(例如,适用于 class 房间的情况)。

classid 属性仅用于编程目的。它们应该遵循您为自己设定的命名约定,并且从程序员的角度来看尽可能有意义。

If you have a <label> for an <input> with a [for] attribute to link to the [id] of the input, does the [id] have to actually mean something?

浏览器语义* 是指浏览器如何识别 DOM 节点以及浏览器将向使用辅助导航的用户读取的内容。

[id][class] 属性 不会 添加语义。在可能的情况下仍然使用描述性 ID 和 类 很重要,但仅限于使开发更容易的范围内。

Is it read?

没有。据我所知,[id] 属性永远不会通过网站的正常操作直接读给用户。请参阅下面关于文档片段标识符的注释。

Or is it just to link them?

它告诉标签<input>(或<select><textarea>…)标签正在标记哪个标签,并且还提供了一些UI功能,例如将焦点移动到单击、点击或以其他方式触发标签时的相关输入。

当标签元素获得焦点时,浏览器会告诉屏幕 reader 读取与该元素关联的标签。


[name] 属性呢?

<form> 屏幕中 readers 不会读取 [name] 属性,因为它不表示任何语义,但是对于 GET 请求 [name] 属性将用作查询字符串中的键。查询字符串 可能 会被用户读取,因此值得考虑使用人类可读的 [name] 而不是自动生成的内容。


文档片段标识符呢?

如果您计划使用 [id]<a> 锚定页面,那么当 [id] 属性的值成为URL。就像 [name] 属性一样,在这些情况下可能值得考虑使用人类可读的 [id]


*一个定义为意义的词,这使得讨论其自身的意义……困难且相当元