Menu

HTML 属性:语法、class、id、data-* 与布尔属性

属性为 HTML 元素补充信息:链接指向哪里,图片显示什么,应用哪个 CSS 类。学习属性的语法、所有元素都支持的全局属性、class 和 id、布尔属性以及 data-* 属性。

本页包含可运行的编辑器。编辑、运行,立即查看输出。

什么是 HTML 属性

属性为元素补充信息。它写在开始标签里,由名称、等号和带引号的值组成:name="value"。一个元素可以有任意多个属性,彼此用空格分隔。

href 告诉链接要去哪里,src 和 alt 描述图片,type、placeholder 和 required 配置输入框。每种元素都有自己的一组属性,还有少数属性(下面的全局属性)适用于所有元素。

语法规则

<input type="text" name="city" value="Paris" disabled>
  • 名称、等号、带引号的值。 惯例是用双引号;单引号也可以(想在值里放双引号时就这样写:title='Say "hi"')。
  • 名称不区分大小写。 CLASS 和 class 是同一个属性。值则区分大小写:class="Box" 和 class="box" 是两个不同的类。
  • 没有空格时引号可以省略,但还是要加上。 class=big box 会给元素设置类 big,再加上第二个毫无意义的属性 box。
  • 顺序无关紧要。 <img alt="" src="a.png"> 和 <img src="a.png" alt=""> 完全相同。
  • 同一个元素上每个名称只能出现一次。 如果某个属性出现两次,浏览器会保留第一个,悄悄丢掉第二个。

布尔属性

有些属性只有开和关两种状态。对于这类属性,只要存在就表示 true,值会被忽略。disabled、checked、required、readonly、hidden、multiple、autofocus 和 open 都是这样。

第三个按钮虽然值写的是 false,却仍然是禁用的,因为浏览器只检查这个属性在不在。要关闭布尔属性,就把它删掉。在 JavaScript 中,button.disabled = false 做的正是这件事。

class 属性

class 给元素起一个或多个名字,CSS 和 JavaScript 用它们来找到元素。多个元素可以共用一个类,一个元素也可以有多个类,用空格分隔:

每多一个类,就会叠加一组样式规则。在 CSS 中用点号选择类(.card);在 JavaScript 中,用 element.classList.add('featured') 和 classList.remove 修改类。类是设置样式的常规方式:你的 CSS 大多会以类为目标。

id 属性

id 给元素起一个在页面上唯一的名字。当你恰好需要一个元素时使用它:链接的跳转目标、<label for>,或者 document.getElementById。

点击标签会让输入框获得焦点,因为 for="email" 指向了 id="email"。链接会滚动到 #pricing,因为 href 中的片段与这个 id 相匹配。

classid
可以有多少个元素共用任意多个一个(唯一)
每个元素的值多个,用空格分隔一个
CSS 选择器.name#name
典型用途给一组元素设置样式链接目标、标签、在 JavaScript 中定位某个特定元素

id 不能包含空格。最好以字母开头,方便在 CSS 中使用:不转义的话,#2col 不是合法的 CSS 选择器。

全局属性

以下属性适用于任何元素:

属性作用
id元素的唯一名称
class用空格分隔的类名列表
style内联 CSS,例如 style="color: red"
title鼠标悬停时显示的提示文字
lang内容的语言,例如 lang="fr"
dir文字方向:ltr、rtl 或 auto
hidden隐藏元素(布尔属性)
tabindex让元素可以用 Tab 键聚焦,或设置聚焦顺序
contenteditable允许用户编辑元素的文字
data-*你自己的数据,用 JavaScript 读取

lang 属性有单独的页面,因为它会影响屏幕阅读器、翻译和搜索。

data-* 属性

需要在元素上存放自己的值时,给名称加上 data- 前缀。前缀后面可以接任何名字,JavaScript 通过 element.dataset 读取这些值,名称中的连字符会转换成驼峰命名:

data-product-id 变成了 dataset.productId。读到的值始终是字符串,所以做算术运算之前要先用 Number() 转换。CSS 也可以根据它们来选择元素:[data-price="4.50"]。

常见错误

  • 把 class 写两次。 <div class="a" class="b"> 只保留 a。把两个类写在同一个属性里:class="a b"。
  • 重复使用同一个 id。 两个元素使用相同的 id 会让 #links、标签和 getElementById 出问题,后者只返回第一个元素。会重复出现的东西请用类。
  • disabled="false" 或 checked="false"。 属性仍然存在,所以它依然是开启的。应该把它删掉。
  • 含空格的值不加引号。 alt=My photo 会把 alt 设为 My。每个值都要加引号。
  • 不加 data- 就自创属性。 <div price="4"> 是不合法的 HTML,还可能和将来的标准属性冲突。请用 data-price。

常见问题

HTML 属性是什么?

属性是写在开始标签里的附加信息,格式为 name="value"。它用来配置元素:href 设置链接指向哪里,src 和 alt 描述图片,class 和 id 让 CSS 和 JavaScript 能找到这个元素。

HTML 中 class 和 id 有什么区别?

id 在页面上必须唯一,用来标识一个元素,供 #fragment 链接、<label for> 和 getElementById 使用。class 可以被许多元素共用,一个元素也可以有多个用空格分隔的类。设置样式时请用类。

如何给一个 HTML 元素添加多个类?

把它们写在同一个 class 属性里,用空格分隔:<div class="card featured dark">。把 class 写两次是不行的:浏览器只保留第一个。

HTML 属性值需要加引号吗?

当值里没有空格或特殊字符时,引号可以省略,但始终加引号才是稳妥的习惯。class=big box 会给元素设置类 big,外加一个名为 box 的独立属性。

为什么写了 disabled="false" 按钮还是禁用的?

disabled 是布尔属性:只要它存在就表示 true,不管值写的是什么。要启用元素,就删掉这个属性,或者在 JavaScript 中设置 button.disabled = false,它会把属性删掉。

可以自己发明 HTML 属性吗?

请使用 data- 前缀:data-price="12" 或 data-user-id="7" 在任何元素上都是合法的,并且可以在 JavaScript 中通过 element.dataset 读取。不带前缀的自创属性名是不合法的 HTML。

Coddy 编程语言插图

和 Coddy 一起学编程

开始