如果元素由标签包裹,标签是否需要" for"属性?

时间:2015-01-07 19:19:15

标签: html accessibility section508

说我有一套电台<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;。

2 个答案:

答案 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元素的一列中有标签,则在另一列中有控件。