435

我想知道以下两个代码片段有什么区别:

<label>Input here : </label>
<input type='text' name='theinput' id='theinput'/>

<label for='theinput'>Input here : </label>
<input type='text' name='theinput' id='theinput'/>

我确信当你使用一个特殊的 JavaScript 库时它会做一些事情,但除此之外,它是验证 HTML 还是出于其他原因需要?

4

7 回答 7

685

<label>标签允许你点击标签,它会被视为点击相关的输入元素。有两种方法可以创建此关联:

一种方法是将标签元素包裹在输入元素周围:

<label>Input here:
    <input type='text' name='theinput' id='theinput'>
</label>

另一种方法是使用for属性,给它相关输入的 ID:

<label for="theinput">Input here:</label>
<input type='text' name='whatever' id='theinput'>

这对于与复选框和按钮一起使用特别有用,因为这意味着您可以通过单击相关文本来选中该框,而不必点击该框本身。

在MDN中阅读有关此元素的更多信息。

于 2013-08-25T18:46:46.430 回答
62

for属性将标签与控制元素相关联,如labelHTML 4.01 规范中的描述中所定义。这意味着,除其他外,当label元素获得焦点时(例如,通过单击),它将焦点传递给其关联的控件。标签和控件之间的关联也可以由基于语音的用户代理使用,这可以让用户在处理控件时询问关联的标签是什么。(这种关联可能不像在视觉渲染中那么明显。)

在问题的第一个示例中(没有for),label标记的使用没有逻辑或功能含义——它没有用,除非您在 CSS 或 JavaScript 中使用它。

HTML 规范并未强制将标签与控件关联,但 Web 内容可访问性指南 (WCAG) 2.0 可以。这在技术文档H44 中有所描述:Using label elements to associate text label with form controls,这也解释了隐式关联(通过嵌套,例如inputinside )不像通过和属性label的显式关联那样被广泛支持,forid

于 2013-08-25T19:17:57.597 回答
14

简而言之,它的作用是引用id输入,仅此而已:

<label for="the-id-of-the-input">Input here:</label>
<input type="text" name="the-name-of-input" id="the-id-of-the-input">
于 2014-10-13T20:40:10.217 回答
2

标签的for属性<label>应该等于id相关元素的属性才能将它们绑定在一起。

于 2013-08-25T18:42:50.750 回答
2

label for=html 形式使用

这可以允许在视觉上分离标签和对象,同时保持它们的链接。

示例:有一个复选框两个标签

  • 您可以通过无所谓地单击来选中/取消选中该框

    • 任何标签或
    • 在复选框上,

    但不是在文本上,也不是在输入内容上......

<label for="demo1"> There is a label </label>
<br />
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Duis sem velit, ultrices et, fermentum auctor, rhoncus ut, ligula. Phasellus at purus sed purus cursus iaculis. Suspendisse fermentum. Pellentesque et arcu. Maecenas viverra. In consectetuer, lorem eu lobortis egestas, velit odio imperdiet eros, sit amet sagittis nunc mi ac neque. Sed non ipsum. Nullam venenatis gravida orci.
<br />
<label for="demo1"> There is a 2nd label </label>
<input id="demo1" type="checkbox">Demo 1</input>

一些有用的技巧

相同的示例,但有两个复选框和一些不同的 CSS 效果(例如写入文本:Select thisDeselect this反映复选框状态。)。

通过使用样式表CSS功能,您可以做很多有趣的事情......

body { background: #DDD; } 
.button:before { content: 'S'; }
.box:before { content: '☐'; }
label.button   { background: #BBB;
    border-top: solid 2px white;border-left: solid 2px white;
    border-right: solid 2px black;border-bottom: solid black 2px; }

#demo2:checked ~ .but2:before { content: 'Des'; }
#demo2:checked ~ .but2  { background: #CCC;
    border-top: solid 2px black;border-left: solid 2px black;
    border-right: solid 2px white;border-bottom: solid white 2px; }
#demo2:checked ~ .box2:before { content: '☒'; }

#demo1:checked ~ .but1  { background: #CCC;
    border-top: solid 2px black;border-left: solid 2px black;
    border-right: solid 2px white;border-bottom: solid white 2px; }

#demo1:checked ~ .but1:before { content: 'Des'; }
#demo1:checked ~ .box1:before { content: '☒'; }
<input id="demo1" type="checkbox">Demo 1</input>
<input id="demo2" type="checkbox">Demo 2</input>
<br />
<label for="demo1" class="button but1">elect 1</label> - 
<label for="demo2" class="button but2">elect 2</label>
<br />
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Duis sem velit, ultrices et, fermentum auctor, rhoncus ut, ligula. Phasellus at purus sed purus cursus iaculis. Suspendisse fermentum. Pellentesque et arcu. Maecenas viverra. In consectetuer, lorem eu lobortis ...
<br />
<label for="demo1" class="but1 button">elect this 2nd label for box 1</label> - 
<label class="but2 button" for="demo2">elect this other 2nd label for box 2</label>
<br /><br />
<label for="demo1" class="box box1"> check 1</label>
<label for="demo2" class="box2 box"> check 2</label>

使用示例:仅使用 CSS 切换侧边栏(第二个片段)。

于 2021-01-25T06:06:59.417 回答
0

for属性显示此标签代表相关输入字段,或复选框或单选按钮或与之关联的任何其他数据输入字段。例如

<li>
    <label>{translate:blindcopy}</label>
    <a class="" href="#" title="{translate:savetemplate}" onclick="" ><i class="fa fa-list" class="button" ></i></a> &nbsp 
            <input type="text" id="BlindCopy" name="BlindCopy" class="splitblindcopy" />

</li>
于 2019-11-04T12:28:30.093 回答
-1

它标记任何输入是for属性的参数。

<input id='myInput' type='radio'>
<label for='myInput'>My 1st Radio Label</label>
<br>
<input id='input2' type='radio'>
<label for='input2'>My 2nd Radio Label</label>
<br>
<input id='input3' type='radio'>
<label for='input3'>My 3rd Radio Label</label>

于 2020-01-16T04:36:59.117 回答