lang和charset必须显式声明且位置精准:须为首个子元素,不可省略或错写为zh/zh-tw,否则必然导致乱码、语音朗读错乱、ci失败。

HTML代码质量不是靠人盯出来的,而是靠规则卡死、工具拦住、流程兜底的。字符标准和属性传递这两件事,表面看是细节,实际决定着页面能否正确解码、辅助技术能否读取、CI能否稳定通过。
为什么 lang 和 charset 必须显式且位置精准
漏写或放错位置,不是“可能出问题”,而是“必然触发故障”。浏览器在解析到 <meta charset="UTF-8"> 前遇到非ASCII字符(比如中文),就会按默认编码(通常是ISO-8859-1)尝试解码,结果就是乱码; 如果缺失,NVDA等屏幕阅读器会默认用英文语音库读中文,语调错乱、断句错误。
-
<meta charset="UTF-8">必须是的第一个子元素,早于<title></title>和任何外部资源引用 -
lang值必须精确到地区,zh-CN≠zh≠zh-TW,否则部分语音合成引擎无法匹配对应方言库 - 禁止混用已废弃的
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">,现代浏览器不识别该写法,且某些构建工具会报 warning
class 等属性顺序混乱会直接拉高 Git diff 噪声
当 class 有时写在 id 前、有时写在后面,Git diff 就会把“只是换了个位置”当成“改了两行”,掩盖真实变更。这不是格式洁癖,是协作成本问题。
- 推荐固定顺序:
class→id→name→data-*→src/href/for/type→title/alt→aria-*/role -
style永远靠后——它权重高、易变,放在前面会让 diff 更难聚焦语义变更 - 布尔属性如
disabled、required不带等号,写成disabled,而非disabled="disabled"或disabled=""
所有属性值必须用双引号,空字符串也不能省略
单引号、不加引号、省略空值,都会在特定场景下崩:Webpack 插件报 ParseError: Unexpected token,Prettier 自动补双引号后又被手动删掉,CI 中 HTMLHint 直接 fail。
-
alt=""是合法且必需的,尤其对<img>,不能写成alt=或直接去掉 -
class="header active"中的空格是值的一部分,不加引号会导致解析为两个独立属性 - VS Code + Prettier 默认会修正,但团队成员手改后未保存或绕过格式化,就会让问题漏网
真正卡住质量的,从来不是“要不要做”,而是“谁来确保每次提交都做”。靠文档约定没用,只有 .prettierrc 配合 lint-staged + husky pre-commit hook,才能让 lang 不丢、charset 不错位、引号不被手动删——这些事,机器比人更守规矩。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











