是 HTML5 唯一正确且必需的文档类型声明,因其不基于 SGML 故无需 DTD;省略或写错将触发怪异模式,导致布局、API 行为异常,现代框架和构建工具也需确保其首行无空格、无 BOM、大小写不限但内容严格匹配。

HTML5 的 就是全部,没有其他变体,也不需要系统标识符或 URL。
为什么只写 就够了
HTML5 不再基于 SGML,所以不需要引用 DTD 文件;浏览器只要看到这个声明,就会以标准模式(standards mode)解析文档。任何多余内容——比如加引号、加空格、拼错大小写、补上 URL——都可能触发怪异模式(quirks mode)或导致校验警告。
✅ 正确且唯一推荐写法✅ 全小写也合法(HTML5 不区分大小写)❌ 这是 HTML4 的写法,不是 HTML5⚠️ 虽然规范里提过,但无实际作用,纯属冗余
不写或写错 会怎样
省略它,或者写成 、 等错误形式,浏览器大概率进入怪异模式:盒模型计算异常、width 行为不一致、getBoundingClientRect() 返回值偏差、Flex/Grid 布局失效等。
- Chrome / Firefox / Safari 在无 doctype 或非法 doctype 下会启用 quirks mode
- IE6–8 的 quirks mode 影响更严重,连
document.getElementById都可能返回 null - 现代框架(如 React/Vue)生成的 HTML 仍需手动确保首行是
,否则 SSR 输出可能被降级
在模板和构建工具中怎么保证正确
多数现代脚手架(Vite、Create React App、Next.js)默认已内置正确 doctype,但自定义 HTML 模板时容易遗漏或误改。
- Webpack 的
html-webpack-plugin:通过template选项指定 HTML 文件,必须确认其第一行为 - Vite 的
index.html:直接编辑该文件,删掉注释或空行顶格写 - 服务端渲染(如 Express + EJS):确保模板开头就是
,不要被前导空格或 BOM 字符干扰
页面标题 Hello
最容易被忽略的是:有些编辑器保存时自动添加 BOM(尤其是 Windows 上的记事本),会导致 前出现不可见字符,浏览器无法识别——务必用 VS Code、Sublime 等工具检查并保存为「UTF-8 无 BOM」格式。











