必须位于文件首行首字符,否则触发怪异模式:无此声明或前置空格/注释/bom会导致浏览器降级为backcompat模式,盒模型错乱、api行为异常;它非标签而是标准模式开关,唯一被全浏览器一致识别的写法。

HTML模板里必须写 ,否则浏览器可能用老式规则渲染页面,导致样式错乱、脚本行为异常。
为什么浏览器需要 这行
这行不是 HTML 标签,而是给浏览器的“模式开关”。它不参与页面结构,只决定解析器用哪套规则处理后续所有 HTML 代码。
- 有正确
→ 触发 <code>CSS1Compat模式(标准模式),盒模型、Flex 布局、getBoundingClientRect()等都按现代规范工作 - 缺失或写成
、<code>..>(旧版但拼错)、甚至空格/注释在它前面 → 大概率退化为BackCompat模式(怪异模式),IE6 那套盒模型复活,width包含 padding 和 border - 用
document.compatMode可现场验证:控制台输入这行,返回"CSS1Compat"才算成功
必须放在第一行且不能有前置内容
哪怕一个空格、一行注释、BOM 字符,都会让某些浏览器(尤其是旧版 IE 和部分移动端 WebView)忽略该声明,直接进怪异模式。
- ✅ 正确:
是文件第一个字符 - ❌ 错误:
(开头有零宽空格)、<code><!-- 注释 -->、<code>\n(首行换行) - 编辑器保存时选 UTF-8 无 BOM 编码,VS Code 默认是带 BOM 的,需手动改;Sublime Text 新建文件默认无 BOM
HTML4/XHTML 的 DOCTYPE 为什么现在不用了
它们本质是 SGML DTD 引用,语法长、易出错、区分 Strict/Transitional/FrameSet,且对现代浏览器已无实际约束力。
:HTML4 过渡型,允许 <code><font></font>、<center></center>等废弃标签,但浏览器仍按标准模式渲染 —— 前提是你没拼错 URL 或漏引号:XHTML 严格型,要求小写标签、闭合所有元素,但现代浏览器早已不校验这些- HTML5 的
是唯一被所有浏览器一致识别并强制触发标准模式的写法,其他全是历史包袱
最容易被忽略的是:模板生成工具(如 Webpack 插件、Vue CLI 模板、Next.js pages/_document.tsx)有时会悄悄注入注释或空行到 DOCTYPE 前面。上线前务必打开浏览器“查看网页源代码”,确认 真的是第一行、第一个字符。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











