W3Schools有关于labels的说法:
<label>
标记定义输入元素的标签。 [强调我的]
这是否意味着以下HTML无效?
<!doctype html>
<html>
<head>
<title>Example document</title>
</head>
<body>
<label for="x">Label</label>
<hr>
<div id="q" contentEditable="true">Hello</div>
<hr>
<div id="x" contentEditable="true">World</div>
</body>
</html>
点击World
时,Chrome和IE8都会关注Label
,而Firefox则不会。
哪个是对的?
答案 0 :(得分:9)
根据W3C适用于表单控件,表单控件为defined as:
所以FireFox在技术上是正确的,虽然如果浏览器没有将它限制在那些元素中,我几乎不会认为它是“破坏”。
答案 1 :(得分:5)
HTML规范说,关于label
的“for”属性,“当存在时,此属性的值必须与同一文档中某些其他控件的id属性的值相同。如果不存在,则定义的标签与元素的内容相关联。“
因此“for”中的id引用应该是控件的id引用。什么是控制?该规范基本上表示任何input
都是一个控件,button
,select
或object
也是如此。所以Firefox在技术上是正确的 - div
不是控件。
答案 2 :(得分:1)
我想说这不适合使用标记,因为标签语义是它们专门用于控件。
LABEL元素用于指定 没有控件的标签 隐式标签,
答案 3 :(得分:1)
最新的WhatWG规范说:
某些元素(并非全部与表单相关)被归类为可标记元素。这些是可以与标签元素关联的元素。
button
,input
(如果type
属性未处于“隐藏”状态),meter
,output
,progress
,{ {1}},select
...
可以指定
textarea
属性以指示与标题相关联的表单控件。如果指定了属性,则该属性的值必须是与for
元素在同一树中的可标记元素的ID。
(来源:https://html.spec.whatwg.org/multipage/forms.html。)
换句话说,该标准仅允许label
属性指向上面列出的7种标记类型之一的元素。因此,问题中显示的HTML(使用for
元素指向可编辑的for
)在当前规范下在技术上是无效的HTML。
Nu Html Checker(即endorsed by WhatWG)同意;如果您要求它从问题中验证HTML文档,则会显示:
错误:
div
元素的for
属性的值必须是非隐藏表单控件的ID。