引言
HTML 属性是标签的重要组成部分,正确的属性书写不仅影响代码可读性,还关系到页面性能和可访问性。本文将详细介绍 HTML 属性的书写规范。
基本规范
1. 属性值使用双引号
<!-- 正确 -->
<div class="container" id="main">
<!-- 不推荐:单引号 -->
<div class='container' id='main'>
<!-- 错误:无引号 -->
<div class=container id=main>
原因:
- HTML 规范推荐使用双引号
- 避免属性值包含空格时出错
- 保持代码一致性
2. 属性名使用小写
<!-- 正确 -->
<div class="box" data-id="123">
<!-- 错误 -->
<div CLASS="box" DATA-ID="123">
3. 布尔属性省略值
<!-- 推荐 -->
<input type="text" disabled>
<input type="checkbox" checked>
<details open>
<!-- 不推荐 -->
<input type="text" disabled="disabled">
<input type="checkbox" checked="checked">
属性顺序规范
虽然 HTML 不强制属性顺序,但统一顺序能提升可读性。推荐顺序:
通用顺序
id/class— 标识data-*— 自定义数据src/href— 资源路径alt/title— 描述信息width/height— 尺寸role/aria-*— 可访问性- 事件属性 —
onclick等
示例
<!-- 推荐顺序 -->
<img
class="avatar"
data-user-id="123"
src="/images/avatar.jpg"
alt="用户头像"
width="40"
height="40"
role="presentation">
<a
class="nav-link"
href="/about"
title="关于我们"
target="_blank"
rel="noopener">
关于
</a>
常用属性详解
全局属性
适用于所有 HTML 元素的属性:
| 属性 | 说明 | 示例 |
|---|---|---|
class | CSS 类名 | class="btn primary" |
id | 唯一标识 | id="header" |
style | 内联样式 | style="color: red" |
title | 提示信息 | title="点击提交" |
hidden | 隐藏元素 | <div hidden> |
tabindex | Tab 顺序 | tabindex="0" |
draggable | 可拖拽 | draggable="true" |
data-* 自定义属性
用于存储自定义数据,便于 JavaScript 读取:
<!-- HTML -->
<button data-action="delete" data-id="123">删除</button>
<!-- JavaScript 读取 -->
const btn = document.querySelector('button');
console.log(btn.dataset.action); // "delete"
console.log(btn.dataset.id); // "123"
命名规则:
- 必须以小写
data-开头 - 后面跟小写字母和连字符
- 不能以
xml开头
表单属性
<!-- 输入类型 -->
<input type="text" placeholder="请输入用户名">
<input type="email" required>
<input type="password" minlength="6">
<!-- 验证属性 -->
<input type="number" min="0" max="100" step="5">
<input type="text" pattern="[A-Za-z]{3,}">
<!-- 自动完成 -->
<input type="text" autocomplete="username">
<input type="email" autocomplete="email">
可访问性属性
ARIA 属性
<!-- 图标按钮添加说明 -->
<button aria-label="关闭对话框">
<i class="icon-close"></i>
</button>
<!-- 进度条 -->
<div role="progressbar"
aria-valuenow="75"
aria-valuemin="0"
aria-valuemax="100">
</div>
<!-- 展开/折叠 -->
<button aria-expanded="false" aria-controls="panel1">
展开详情
</button>
<div id="panel1" hidden>
详细内容...
</div>
常用 ARIA 角色
| 角色 | 说明 |
|---|---|
button | 按钮 |
link | 链接 |
dialog | 对话框 |
alert | 警告信息 |
navigation | 导航 |
main | 主要内容 |
性能相关属性
图片懒加载
<img src="placeholder.jpg"
data-src="real-image.jpg"
loading="lazy"
alt="描述">
资源预加载
<link rel="preload" href="font.woff2" as="font" crossorigin>
<link rel="prefetch" href="next-page.html">
<link rel="preconnect" href="https://api.example.com">
脚本加载策略
<!-- 阻塞加载 -->
<script src="script.js"></script>
<!-- 异步加载,下载完立即执行 -->
<script src="script.js" async></script>
<!-- 延迟加载,DOM 解析完执行 -->
<script src="script.js" defer></script>
常见错误
错误一:属性值包含未转义字符
<!-- 错误 -->
<div title="He said "Hello"">
<!-- 正确 -->
<div title="He said "Hello"">
错误二:重复属性
<!-- 错误:class 出现两次 -->
<div class="box" id="main" class="active">
<!-- 正确 -->
<div class="box active" id="main">
错误三:过长的 class 列表
<!-- 不推荐 -->
<div class="container fluid mt-3 mb-3 p-2 bg-light border rounded shadow-sm">
<!-- 推荐:使用 CSS 组合 -->
<div class="card-container">
总结
良好的属性书写习惯能让 HTML 代码更加规范、可维护。遵循统一顺序、合理使用自定义属性、关注可访问性,是专业前端开发者的基本素养。