HTML: HTML 属性

属性为 HTML标签提供了额外的配置信息,从而使元素的行为和外观更加丰富

1. 什么是属性

HTML 属性(attribute)是写在开始标签中的特殊关键字,用来对标签进行更细致的配置。属性以 属性名="属性值" 的形式写在开始标签中,一个标签可以同时拥有多个属性,彼此之间用空格分隔。

▶ 示例

HTML
<!-- 单个属性 -->
<a href="https://example.com">这是一个链接</a>

<!-- 多个属性,用空格分隔 -->
<img src="/assets/images/tutorials/html-example-photo.webp" alt="A sample photo" width="800" height="600">

<!-- 属性值建议使用双引号包裹,但单引号也可以 -->
<p title='一段提示文字'>带提示的段落</p>
▶ 试一试

在上面的例子中,hrefsrcaltwidthheighttitle 都是属性名,引号内的内容则是具体的属性值。属性名一律小写,属性值建议使用双引号包裹。

📌 属性书写规范: HTML5 中属性值周围的引号可以省略(如果值不含空格等特殊字符),但强烈建议始终使用双引号,这样代码更清晰,也能避免意外错误。


2. 常用全局属性

全局属性(Global Attributes)是可以在任何 HTML 标签上使用的属性。以下是几个最常用的全局属性:

(1) id — 唯一标识

id 属性为元素指定一个唯一的标识符。在同一个页面中,每个 id 只能使用一次。它常用于锚点跳转、CSS 选择器和 JavaScript 操作。

▶ 示例

HTML
<h1 id="page-title">欢迎来到我的网站</h1>
<!-- 通过 #page-title 可以跳转到这个标题位置 -->
<a href="#page-title">跳转到标题</a>
▶ 试一试

(2) class — 类名

class 属性可以为元素指定一个或多个类名。与 id 不同,同一个类名可以在多个元素上重复使用,是 CSS 样式化和 JavaScript 选择的主要手段。

▶ 示例

HTML
<!-- 多个元素可以使用相同 class -->
<p class="highlight">这段文字会高亮显示</p>
<p class="highlight">这段文字也会高亮显示</p>

<!-- 一个元素可以有多个 class,用空格分隔 -->
<div class="box bordered rounded">这是一个带边框的圆角盒子</div>
▶ 试一试

(3) style — 内联样式

style 属性允许直接在标签中编写 CSS 样式。虽然不推荐大量使用(推荐将样式写在独立 CSS 文件中),但它在快速测试或动态覆盖样式时非常方便。

▶ 示例

HTML
<p style="color: red; font-size: 18px;">这是一段红色大字</p>
<div style="background: #f0f0f0; padding: 10px; border-radius: 5px;">
  这是一个带背景色的圆角盒子
</div>
▶ 试一试

(4) title — 提示文字

title 属性为元素提供额外的提示信息。当用户将鼠标悬停在该元素上时,浏览器会显示一个工具提示(tooltip)。

▶ 示例

HTML
<p title="这是一段提示文字">把鼠标放在这段文字上看看会发生什么</p>
<abbr title="HyperText Markup Language">HTML</abbr>
▶ 试一试

(5) 全局属性总结

属性 作用 唯一性 使用频率
id 唯一标识元素,用于锚点、CSS、JS 页面唯一 ⭐⭐⭐⭐⭐
class 为元素指定类名,用于 CSS / JS 可重复 ⭐⭐⭐⭐⭐
style 在标签内直接编写 CSS 样式 ⭐⭐⭐
title 鼠标悬停时显示提示文字 ⭐⭐
lang 声明元素内容的语言 ⭐⭐
dir 指定文本方向(ltr / rtl)

3. 布尔属性

布尔属性(Boolean Attributes)是一类特殊的属性——它们不需要属性值,只要出现就表示"开/为真"。常见的布尔属性有 disabledcheckedreadonlyrequired

▶ 示例

HTML
<!-- 禁用状态的输入框 -->
<input type="text" disabled>

<!-- 预选中的复选框 -->
<input type="checkbox" checked> 同意条款

<!-- 只读输入框 -->
<input type="text" value="只读内容" readonly>

<!-- 必填字段 -->
<input type="email" required>
▶ 试一试

布尔属性也可以写成 属性名="属性名" 的形式,例如 disabled="disabled",这两种写法效果完全一样。推荐使用简洁的写法(只写属性名)。

✅ 最佳实践: 布尔属性推荐只写属性名(不写值),代码更简洁。只有当 XHTML 语法严格要求时才使用 属性名="属性名" 的形式。


4. 自定义数据属性data-*

HTML5 引入了一个非常灵活的特性:自定义数据属性(custom data attributes)。你可以在任何 HTML 标签上创建自己的属性,只要属性名以 data- 开头。它的作用是在 HTML 标签中存储额外的数据,供 JavaScript 和 CSS 使用。

比如你有一个商品列表,想在每个商品上保存它的价格和库存数量——这些数据不需要显示在页面上,但 JavaScript 需要读取它们来做交互逻辑。

▶ 示例

HTML
<ul>
  <li data-product-id="101" data-price="29.9" data-stock="50">T恤 - ¥29.9</li>
  <li data-product-id="102" data-price="99.9" data-stock="20">背包 - ¥99.9</li>
  <li data-product-id="103" data-price="199" data-stock="0">耳机 - ¥199(已售罄)</li>
</ul>

<script>
// 通过 dataset 访问 data-* 数据
const items = document.querySelectorAll('li');
for (let item of items) {
  console.log(item.dataset.productId);  // "101", "102", "103"
  console.log(item.dataset.price);      // "29.9", "99.9", "199"
}
</script>
▶ 试一试

这个例子中,data-product-iddata-pricedata-stock 都是我们自己定义的属性。它们不会影响页面的显示,但 JavaScript 可以轻松读取。点击"试一试"运行后,打开浏览器开发者工具(F12)的 Console 面板,就能看到读取到的数据。

命名规则:HTML 中用 data-user-name(连字符),JavaScript 中对应 dataset.userName(驼峰命名)。连字符后的首字母会自动转换为大写。

▶ 示例

HTML
<div data-user-name="张三" data-user-age="20">用户信息</div>

<script>
// 读取 data-user-name → dataset.userName(驼峰)
const div = document.querySelector('div');
console.log(div.dataset.userName);  // "张三"
console.log(div.dataset.userAge);   // "20"
</script>
▶ 试一试
📌 使用场景: data-* 属性在前端开发中非常常见,例如保存用户 ID、排序状态、按钮类型、图表配置等。它比在 JavaScript 中维护一个独立的数据对象更直观,因为数据和对应的 HTML 结构"在一起"。到后续 JavaScript 章节中,你会大量用到这个特性。

⚠️ 注意: data-* 属性应该只用来存储与页面展示相关的数据,而不是用来替代数据库或后端存储。敏感信息(如密码、密钥)绝对不能放在 data-* 中——因为任何人都可以通过查看网页源代码看到它。

❓ 常见问题

Q 属性值必须用引号包裹吗?单引号和双引号有什么区别?
A HTML5标准要求属性值必须用引号包裹,推荐使用双引号("value")。单引号('value')在HTML5中也合法,但双引号是行业惯例,更容易阅读和维护。只有在特殊情况下才用单引号:当属性值本身包含双引号时(如 title='He said "Hello"')。不加引号虽然在某些情况下浏览器能容错处理,但容易导致解析错误,绝对不推荐。
Q idclass有什么区别?什么时候用哪个?
A id是"身份证号",一个页面中只能有一个元素使用某个id值,具有唯一性;class是"班级名",多个元素可以共享同一个class,具有复用性。实际开发中,90%的情况用class——因为样式复用是常态,而需要唯一标识的场景很少。id的优先级比class高(CSS选择器权重不同),但不要为了提高优先级而滥用id。记住:id用于JavaScript精确查找,class用于CSS批量样式。
Q 为什么有些属性(如disabledchecked)不需要赋值?
A 这类属性叫"布尔属性",它们的存在本身就代表"开启",不存在就代表"关闭"。就像电灯开关——开关在就是开,不在就是关,不需要说"开关=开"。HTML5规定布尔属性不能赋值为false,想关闭就直接删除属性。例如:<input disabled> 表示禁用,去掉disabled就启用。不要写成 disabled="true"disabled="false"——前者虽然能工作但冗余,后者不会禁用输入框(这是常见误区)。

📖 小节

📝 作业

  1. 属性综合练习:创建一个包含以下元素的页面:
    • 一个带 idclassstyle 属性的段落;
    • 一个带 title 属性的链接(鼠标悬停可看到提示);
    • 一个带 disabled 属性的输入框(灰色的、不可点击)。
  2. *data- 练习:**创建一个商品卡片列表,每个卡片使用 data-* 属性存储商品名称、价格和库存。然后用 JavaScript 在浏览器控制台中通过 document.querySelectorAlldataset 读取这些数据。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏