freecodecamp上HTML教程的Create a Set of Radio Buttons这一节中,看到这样一段话,

It is considered best practice to set a for attribute on the label element, with a value that matches the value of the id attribute of the input element. This allows assistive technologies to create a linked relationship between the label and the child input element.

大概的意思是:最好的做法,是给label标签,添加for属性,其值与input标签的id属性的值相同,以在label和input之间创建关联。

同时,给出一段示例代码,如下:

<!-- Code 1 -->
<label for="indoor">
<input id="indoor" type="radio" name="indoor-outdoor">Indoor
</label>

代码中,labelfor属性值与inputid属性值相同。从这段代码中,并不能看出关联在何处。即使将for属性删除,运行结果也没有差别。

w3schools上,关于label的for属性的定义如下:

The for attribute specifies which form element a label is bound to.
译文:for属性指定label与表单中的哪个元素进行绑定。

示例代码:

<!-- Code 2 -->
<form action="/action_page.php">
<input type="radio" name="gender" id="male" value="male">
<label for="male">Male</label>
<br>
<input type="radio" name="gender" id="female" value="female">
<label for="female">Female</label>
<br>
<input type="radio" name="gender" id="other" value="other">
<label for="other">Other</label>
<br>
<input type="submit" value="Submit">
</form>

根据w3schools提供的定义和示例代码,可以看出for属性和id属性相同的话,label和input是一一对应的关系。

对比两段代码,不难发现,

  1. label与input标签的包含关系不同。Code 1 的label和input,属于包含关系,Code 2 的label和input相对独立。
  2. label与input在页面上的排列方式不同。通过Chrome的开发者工具(快捷键Ctrl + Shift + i)不难发现,Code 1 的运行结果,label标签将input标签包含,Code 2 的运行结果,label标签与input标签并列。
  3. label与input一一对应。点击label的内容,对应的单选按钮都会被选中。

如果,我们将两段代码中label的for属性删除,则之前的第1点和第2点不变,变化的是第3点。Code 1 的运营结果,点击label的内容,照旧能够选中单选按钮。因为input包含在label中。而 Code 2 的则不同,点击label的内容,无法选中单选按钮。

经过简单的代码运行结果对比,我们能够验证文章开头引用的那段话是正确的。为label添加for属性的这个做法,能够提高代码质量。

关于<label>的for属性的简单探索的更多相关文章

  1. WinForms中的Label的AutoSize属性

    当大量使用UserControl组合UI时,如果更改了Label的Text属性,Label.AutoSize属性会影响UserControl的OnLoad事件的发生顺序; public overrid ...

  2. label的for属性

    一.使用介绍 <label>专为input元素服务,为其定义标记. for属性规定label与哪个表单元素绑定 label和表单控件绑定方式又两种: 1.将表单控件作为label的内容,这 ...

  3. 实例级别和类级别的static、构造函数、字段属性的简单介绍

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 实例级别 ...

  4. label标签的属性

    //label标签的属性 - (void)viewDidLoad { //初始化一个label1标签对象,初始化有很多方法,最原始的就是init,此处用带有frame的方法 UILabel *labe ...

  5. Servlet过滤器简单探索

    过滤器的工作时机介于浏览器和Servlet请求处理之间,可以拦截浏览器对Servlet的请求,也可以改变Servlet对浏览器的响应. 其工作模式大概是这样的: 一.Filter的原理 在Servle ...

  6. label 的for属性总结

    一.使用介绍 1. 定义:for属性规定label与哪个表单元素绑定. <label>是专门为<input>元素服务的,为其定义标记. label 和表单控件绑定方式有两种: ...

  7. 用图片作为label,for属性IE下不起作用

    IE浏览器存在一个BUG,当你使用label的for属性达到点击label使对应的表单元素聚焦,label中的内容为图片时,IE浏览器下不起作用. 例如: <input type="c ...

  8. HTML表格属性及简单实例

    这里主要总结记录下表格的一些属性和简单的样式,方便以后不时之需. 1.<table> 用来定义HTML的表格,具有本地属性 border 表示边框,border属性的值必须为1或空字符串( ...

  9. label 的autosize属性

    label 的autosize属性,显示不全的问题.

随机推荐

  1. iOS即时通讯之CocoaAsyncSocket源码解析二

    原文 前言 本文承接上文:iOS即时通讯之CocoaAsyncSocket源码解析一 上文我们提到了GCDAsyncSocket的初始化,以及最终connect之前的准备工作,包括一些错误检查:本机地 ...

  2. PHP模拟请求和操作响应

    模拟请求 fsockopen <?php // 建立连接 $link = fsockopen('localhost', '80'); define('CRLF', "\r\n" ...

  3. 《计算机程式设计》Week3 课堂笔记

    本笔记记录自 Coursera课程 <计算机程式设计> 台湾大学 刘邦锋老师 Week3 Array 3-1 Array Usage 例子:使用数组一次申明10个整数变量 int a[10 ...

  4. oracle alter index rebuild offline与online

    oracle index build online与offline测试环境为oracle 11.2.0.4 --sql test SQL> conn test/test )); begin .. ...

  5. day17跨文件夹导入模块,模块的两种被执行方式,包,直接使用包中模块,包的管理

    复习 ''' 1.模块 -- 一系列功能的集合体,用文件来管理一系列有联系的功能,该文件我们称之为模块,文件名就是模块名 -- import | from...import 来导入模块,从而使用模块中 ...

  6. DFS序1

    给一棵有根树,这棵树由编号为1..N的N个结点组成.根结点的编号为R.每个结点都有一个权值,结点i的权值为vi .接下来有M组操作,操作分为两类:1 a x,表示将结点a的权值增加x:2 a,表示求结 ...

  7. JAVA总结--Spring框架全解

    一.Spring简介 Spring 是个java企业级应用的开源开发框架.Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用.Spring 框架目标是简化Java企业 ...

  8. QT中使用Event Filter监听button事件,Release后button不见

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zhenyu5211314/article/details/27201043 问题RT,在程序中我使用 ...

  9. HTML5-video(播放暂停视频;打开关闭声音;进度条)

    <!DOCTYPE html> <html> <head> <title>HTML5-video(播放暂停视频:打开关闭声音:进度条)</titl ...

  10. linux下docker启动nginx无法访问80端口

    问题: Linux安装了docker,docker启动了一个nginx容器,通过 80 端口无法正常访问 故障排查: 1.检查 nginx 容器启动的命令或者yaml文件,查看是否有跟本机端口进行绑定 ...