关于<label>的for属性的简单探索-程序员宅基地

技术标签: php  

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>

Code 1 运行结果

代码中,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>

Code 2 运行结果

根据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属性的这个做法,能够提高代码质量。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34128237/article/details/88771872

智能推荐

使用Java实现,PDF转换成图片(每一页保存为一张图片)_jar pdf转图片-程序员宅基地

文章浏览阅读786次,点赞2次,收藏5次。基于maven项目1.引入jar包<!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox --><dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.21</version_jar pdf转图片

Java程序员常犯的10个错误-程序员宅基地

文章浏览阅读424次。本文总结了Java程序员常犯的10个错误。#1. 把Array转化成ArrayList把Array转化成ArrayList,程序员经常用以下方法:List list = Arrays.asList(arr);Arrays.asList() 实际上返回一个ArrayList,但是这个ArrayList是Arrays的一个内部私有类,而不是java.util.ArrayLi

Unicode、UTF-8 和 ISO8859-1到底有什么区别〈转〉Unicode、UTF-8 和 ISO8859-1到底有什么区别_电脑没有gbk编码-程序员宅基地

文章浏览阅读882次。〈转〉Unicode、UTF-8 和 ISO8859-1到底有什么区别 1.本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等。 在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是"d6d0 cec4",Unicode编码为"4e2d 6587",UTF编码就是"e4b8ad e69687"。注意,这两个字没有iso8859-1_电脑没有gbk编码

java jni 原理分析_java native interface JNI 简介、基本原理_program.jerry的博客-程序员宅基地

文章浏览阅读153次。JNI是Java Native Interface的缩写,中文为JAVA本地调用。从Java1.1开始,Java Native Interface(JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。使用java与本地已编译的代码交互,通常会丧失平台..._java jni原理

指针容器的应用 --- boost::ptr_container介绍-程序员宅基地

文章浏览阅读2k次,点赞2次,收藏2次。指针容器的应用 --- boost::ptr_container介绍Scott Mayers在>, item 7 告诉我们,当把指针放入标准容器后,不要忘了在销毁容器时释放容器中指针所指向的object,否则"memory leak".例如:class CObj{...};std::vector objVector(3);objVector.push_back(

在美国打高尔夫的规矩-程序员宅基地

文章浏览阅读273次。北京的Steve Qiao认为高尔夫像麻将,是可以打出感情,打出品性的,是很好的商务工具。天气好的时候他一周要跟客户打五、六场球。身为科技公司中国计费网创始人的Steve在美国呆过16年,两头都算球迷。他在国内打球的最大感受是,...

随便推点

嵌入式LInux学习(二)JZ2440恢复出厂设置_uboot一键恢复出厂分区-程序员宅基地

文章浏览阅读2k次。PC机与嵌入式LInux设备上电后的区别 嵌入式LInux设备的Flash基本分区,以JZZ2440举例 进入uboot使用mtd命令可以查看分区情况 BootLoader —— 256k Params —— 128k Kernel —— 2M Root —— 剩余部分 通过uboot校准屏幕 执行 rm et..._uboot一键恢复出厂分区

3:java基础-Integer类常用方法介绍-程序员宅基地

文章浏览阅读217次。在实际程序使用中,程序界面上用户输入的数据都是以字符串类型进行存储的。而程序开发中,我们需要把字符串数据根据需求转换成指定的基本数据类型,如年龄需要转换成int类型,考试成绩需要转换成double类型等。那么,想实现字符串与基本数据之间转换应该怎么办呢?接下来我们就一起学习一下Java的包装类吧。1 java将基础数据类型值封装成了对象。这样可以提供更多操作基本数值的功能...

Kotlin基础-程序员宅基地

文章浏览阅读152次。1.函数a.语句式函数fun 函数名称(参数列表):返回类型{ 函数体 }b.表达式函数fun 函数名称(参数列表):返回类型 = 表达式 fun 函数名称(参数列表) = 表达式fun main(args:Array){ println(max1(4,5))}fun max1(a:Int,b:Int) = if(a>b) a else bfun max2

dhtmlxgantt篇之删除link连接线_dhtml gantt禁用连线-程序员宅基地

文章浏览阅读1.5k次。dhtmlxgantt篇之删除link连接线本文是我再完成新增连接线之后,在dhtmlxgantt.js写了一点自己的代码实现的,异步删除数据表中数据。dhtmlxgantt.js 首先,先看一下源码中保存方法: 这是实现删除操作的方法,其中deleteDemo(n)是我自己写的删除方法,因为源码中deleteLink只是删除了一个store中的数据,但是源数据并未做..._dhtml gantt禁用连线

查找jar包是否存在、引用某个类_查看jar包lib中的jar是否存在_大洼X的博客-程序员宅基地

文章浏览阅读1k次。替换xxx为对应的类名 或者类路径find ./ -name “*.jar” | xargs grep “xxx”_查看jar包lib中的jar是否存在

ScrollView下的UITextField系统手写输入法造成崩溃的解决办法-程序员宅基地

文章浏览阅读643次。原因是输入法手势,与本地重写的touchBeagan等方法冲突,解决办法就是在scrollView的category中重写以下方法即可- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { if (![self isMemberOfClass:[UIScrollView class]]) { } else {