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

W3C校验器报“missing DOCTYPE”怎么修
第一行必须是 <!DOCTYPE html>,前面不能有任何字符——包括空格、BOM头、XML声明、注释或空行。浏览器能容错,但校验器直接失败。
- 用 VS Code 打开文件,右下角检查编码是否为
UTF-8 without BOM;Windows 记事本默认加 BOM,会生成不可见的 - 构建工具(如 Vite)可能在
index.html开头注入模板注释,比如<!-- built at ... -->,必须删掉 - 确认没有
<?xml version="1.0" encoding="UTF-8"?>这类 XML 声明混在最前
为什么 <p><div>xxx</div></p> 校验不过
这不是浏览器兼容问题,而是违反 HTML5 内容模型:<p> 只允许短语级内容(phrasing content),<div>、<section>、<h2> 等块级元素禁止嵌套其中。
- Chrome 会自动修正为
<p></p><div>xxx</div>渲染,但 W3C 校验器按规范严格判定 - 正确写法是改结构:用
<div>包裹<p>,而不是反过来 - 类似陷阱还有:
<li>里写<div>、<head>里漏<title>、<meta charset="utf-8">拼错成utf8
HTMLHint 怎么只校验静态模块不校验模板文件
用 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> 的 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>块,此时需在overrides中调高eslint-plugin-html优先级
真正麻烦的不是语法错误,而是校验器沉默——比如 <img src="x.jpg"> 缺 alt 属性,W3C 只报 warning,HTMLHint 默认也不拦;这种可访问性缺陷得靠规则显式打开,否则上线后才被审计发现。



















