必须将严格置于文件第一行最开头,前面不能有任何字符(包括空格、bom、注释、xml声明或空行);同时需修正内嵌等块级元素的结构错误,改用包裹。

W3C校验器报“missing DOCTYPE”怎么修
第一行必须是 ,前面不能有任何字符——包括空格、BOM头、XML声明、注释或空行。浏览器能容错,但校验器直接失败。
- 用 VS Code 打开文件,右下角检查编码是否为
UTF-8 without BOM;Windows 记事本默认加 BOM,会生成不可见的 - 构建工具(如 Vite)可能在
index.html开头注入模板注释,比如<!-- built at ... -->,必须删掉 - 确认没有
<?xml version="1.0" encoding="UTF-8"?>这类 XML 声明混在最前
为什么 <p></p>
<div>xxx</div> 校验不过
这不是浏览器兼容问题,而是违反 HTML5 内容模型:<p></p> 只允许短语级内容(phrasing content),<div>、<code><section></section>、<h2></h2> 等块级元素禁止嵌套其中。
- Chrome 会自动修正为
<p></p> <div>xxx</div>渲染,但 W3C 校验器按规范严格判定 - 正确写法是改结构:用
<div> 包裹 <code><p></p>,而不是反过来 - 类似陷阱还有:
<li>里写<div>、<code>里漏<title></title>、<meta charset="utf-8">拼错成utf8HTMLHint 怎么只校验静态模块不校验模板文件
用
files和excludeFiles精确控制范围,避免 Vue/React 的.vue或 SSR 输出的临时 HTML 被误检。- 在
.htmlhintrc中配置:"files": ["src/modules/**/*.html", "src/pages/*.html"] - 排除模板:
"excludeFiles": ["**/*.vue", "**/dist/**", "**/build/**"] - 关键规则建议启用:
doctype-first、tag-pair、id-unique、attr-lowercase - CI 脚本中运行:
npx htmlhint src/modules/ --config .htmlhintrc,别用全局htmlhint,版本易冲突
内嵌
<script></script>的 JS 代码怎么一起校验ESLint 默认跳过 HTML 文件里的脚本,必须靠
eslint-plugin-html提取并转发给 ESLint 引擎。- 装对版本:
eslint@8.57+对应eslint-plugin-html@7.x;运行npm list eslint eslint-plugin-html确认无 peer 报错 - VS Code 需显式启用:
"eslint.options": { "extensions": [".js", ".html"] }(v8.40+ 废弃了eslint.validate) -
.eslintrc.js里必须写:processor: "html/html",仅plugins: ["html"]不生效 - 若项目同时用
eslint-plugin-vue,它会接管<script></script>块,此时需在overrides中调高eslint-plugin-html优先级
真正麻烦的不是语法错误,而是校验器沉默——比如
<img src="x.jpg">缺alt属性,W3C 只报 warning,HTMLHint 默认也不拦;这种可访问性缺陷得靠规则显式打开,否则上线后才被审计发现。 - 在











