如何使用可点击标签创建HTML复选框

lau*_*ent 976 html checkbox label click

如何创建一个带有可点击标签的HTML复选框(这意味着单击标签会打开/关闭复选框)?

Wes*_*rch 1838

方法1:包装标签标签

label标签中包装复选框:

<label><input type="checkbox" name="checkbox" value="value">Text</label>
Run Code Online (Sandbox Code Playgroud)

方法2:使用for属性

使用该for属性(匹配复选框id):

<input type="checkbox" name="checkbox" id="checkbox_id" value="value">
<label for="checkbox_id">Text</label>
Run Code Online (Sandbox Code Playgroud)

注意:页面上的ID必须是唯一的!

说明

由于其他答案没有提到它,标签最多可以包含1个输入并省略该for属性,并且假定它是用于其中的输入.

来自w3.org的摘录(我强调):

[for属性]显式将正在定义的标签与另一个控件相关联.如果存在,则此属性的值必须与同一文档中某个其他控件的id属性的值相同.如果不存在,则定义的标签与元素的内容相关联.

要隐式地将标签与另一个控件相关联,控制元素必须位于LABEL元素的内容中.在这种情况下,LABEL可能只包含一个控制元素.标签本身可以位于相关控件之前或之后.

使用此方法有一些优点for:

  • 无需id为每个复选框分配一个(太棒了!).

  • 无需使用中的额外属性<label>.

  • 输入的可点击区域也是标签的可点击区域,因此没有两个单独的位置可以控制复选框 - 只有一个,无论<input>标签和实际标签文本有多远,无论您使用哪种CSS适用于它.

用一些CSS演示:

label {
 border:1px solid #ccc;
 padding:10px;
 margin:0 0 10px;
 display:block; 
}

label:hover {
 background:#eee;
 cursor:pointer;
}
Run Code Online (Sandbox Code Playgroud)
<label><input type="checkbox" />Option 1</label>
<label><input type="checkbox" />Option 2</label>
<label><input type="checkbox" />Option 3</label>
Run Code Online (Sandbox Code Playgroud)

  • @John是专门针对bootstrap的标记指南.如果您没有使用框架,或者使用不同的框架,那么它应该是完全正常的.谢谢回复. (16认同)
  • 喜欢它,但请再次编辑.这仅适用于复选框.我们不鼓励人们用标签包装他们的其他输入,因为这会打破网格系统,移动响应将更难以通过 (13认同)
  • @约翰.在你链接的页面上,bootstrap示例包含带有标签的复选框,我根本没有看到任何警告,可能它与最新的bootstrap不再相关. (3认同)
  • 正如我今天所了解的那样,不要混用方法1和方法2.如果将复选框包装在标签中并包含for,则单击标签将不会触发复选框. (2认同)

Que*_*tin 50

只需确保标签与输入相关联.

<fieldset>
  <legend>What metasyntactic variables do you like?</legend>

  <input type="checkbox" name="foo" value="bar" id="foo_bar">
  <label for="foo_bar">Bar</label>

  <input type="checkbox" name="foo" value="baz" id="foo_baz">
  <label for="foo_baz">Baz</label>
</fieldset>
Run Code Online (Sandbox Code Playgroud)

  • @LarsH - 是的,这就是你创建复选框组的方法. (2认同)
  • 使用PHP,不会让$ _POST ['foo']一次最多使用两个值中的一个?即使两者都检查过.什么是复选框组? (2认同)
  • @JeromeJ:要让php正确处理它,你必须在名称中添加方括号,例如:`<input type ="checkbox"name ="foo []"value ="bar"...>`.这将为您提供一个数组,其中包含所有*checked*框(具有此名称)的值.例如`$ _POST ['foo'] [0]`可能是`bar`和`$ _POST ['foo'] [1]`可能是`baz`(如果两者都被选中). (2认同)

mrm*_*oje 11

您还可以使用CSS伪元素从所有复选框的值属性(分别)中选择和显示标签.
编辑:这只适用于webkit和基于blink的浏览器(Chrome(ium),Safari,Opera ....),因此大多数移动浏览器都适用.这里没有Firefox或IE支持.
这可能仅在将webkit/blink嵌入到您的应用中时才有用.

<input type="checkbox" value="My checkbox label value" />
<style>
[type=checkbox]:after {
    content: attr(value);
    margin: -3px 15px;
    vertical-align: top;
    white-space:nowrap;
    display: inline-block;
}
</style>
Run Code Online (Sandbox Code Playgroud)

所有伪元素标签都是可点击的.

演示:http://codepen.io/mrmoje/pen/oteLl,+ 它的要点

  • 它在Firefox中也不起作用. (3认同)
  • Downvoted.虽然这是可能的,但这是一种糟糕的方式 - 不适用于许多浏览器,不利于可访问性. (3认同)
  • 此解决方案不适用于IE.检查IE11 (2认同)

Dav*_*iss 7

<label for="vehicle">Type of Vehicle:</label>
<input type="checkbox" id="vehicle" name="vehicle" value="Bike" />
Run Code Online (Sandbox Code Playgroud)