说我有一套电台<input>
。我不是一个穴居人,所以我知道我需要将<label>
与那些<input>
联系起来。我喜欢将单选按钮包装在reasons enumerated here的相应标签中。
所以,例如:
<fieldset>
<legend>Should I provide a "for" attribute?</legend>
<label><input type="radio" name="define_the_for_attribute" id="define_the_for_attribute_yes" value="yes" />Yep, if you know what's good for you</label>
<label><input type="radio" name="define_the_for_attribute" id="define_the_for_attribute_no" value="no" />Nah, that would be redundant and repetitive</label>
</fieldset>
此包装将相应的单选按钮与标签相关联。 还需要定义标签的for
属性吗?
<fieldset>
<legend>Should I provide a "for" attribute?</legend>
<label for="define_the_for_attribute_yes"><input type="radio" name="define_the_for_attribute" id="define_the_for_attribute_yes" value="yes" />Yep, if you know what's good for you</label>
<label for="define_the_for_attribute_no"><input type="radio" name="define_the_for_attribute" id="define_the_for_attribute_no" value="no" />Nah, that would be redundant and repetitive</label>
</fieldset>
<{> 3}} As pointed out,&#34;标签元素的for属性必须引用表单控件&#34; (请参阅@Peter),但这可以理解为&#34;如果您指定了可选的for
属性,则必须引用有效的表单控件&#34;。
答案 0 :(得分:7)
根据HTML5规范 - &#34;如果未指定for属性,但label元素具有可变元素后代,则树顺序中的第一个这样的后代是标签元素的标记控件。 &#34;
http://www.w3.org/TR/html5/forms.html#category-label
所以基本上,只要它包装任何这些元素就不需要它:按钮,输入(如果type属性不处于隐藏状态),keygen,meter,output,progress,select或textarea
答案 1 :(得分:2)
根据规范,当控件元素包含在for
元素内时,您不需要label
属性。这个原则也适用于所有现代浏览器,尽管一些非常旧版本的IE仅支持与for
属性的显式关联。
人们可能仍然倾向于在逻辑基础上使用for
属性:控件在逻辑上不是标签的一部分,所以它应该放在它之外。然后,您需要for
属性才能从label
标记中受益。
当控件不能成为for
元素的后代时,label
属性必定为如果您在table
元素的一列中有标签,则在另一列中有控件。