HTML Standard入门答疑:DOCTYPE到底写什么、为什么标准没有版本号?8个高频疑问一次讲透
【免费下载链接】htmlHTML Standard项目地址: https://gitcode.com/gh_mirrors/ht/html
👋 如果你刚接触HTML Standard(HTML 标准),大概率被两个问题卡住过:第一行的DOCTYPE 到底该写什么?为什么这套标准永远没有版本号?本文基于仓库内的官方答疑文档 FAQ.md 和 16 万行标准源文件 source,把新手最常问的 8 个疑问一次讲透,无需任何前置知识。
一、DOCTYPE 唯一正确的写法
✅现代text/html文档,只需要这一行:
<!DOCTYPE html>就这么简单。官方答疑 FAQ.md#L102-L130 解释了为什么选它:
- 短、好记,鼓励所有人统一使用;
- 能触发所有主流浏览器(包括老浏览器)的标准模式;
- 故意不包含任何版本标识,所以无论 HTML 未来怎么演进,它永远有效——这正是"标准没有版本号"的呼应;
- 在
text/html中它大小写不敏感,但推荐就按上面这种写法,避免<DOCTYPE HTML>之类的变体。
💡 仓库里的示例页面也是这么写的,比如 demos/workers/modules/page.html 第一行就是
<!DOCTYPE html>。
两个补充场景:
| 场景 | 写法 |
|---|---|
| 旧式生成工具无法输出标准 DOCTYPE | <!DOCTYPE html SYSTEM "about:legacy-compat">(仅限遗留工具,非给旧浏览器用) |
以 XML 媒体类型(如application/xhtml+xml)发送的文档 | 不需要DOCTYPE,写了也行 |
二、为什么 HTML 标准没有版本号?
这是新手最大的困惑:W3C 时代有 HTML4、HTML5 这些版本,现在为什么没了?
答案两个字:活(Living)标准。
WHATWG 采用的开发模式是"持续维护、永不定稿":
- 浏览器实际都跟随最新版标准,而不是某个"已定稿"的快照;
- 快照有个致命问题——你追的是"已知有错"的内容:错误在被发现后修正于编辑稿中,而实现者却去实现了包含这些 bug 的旧快照,最终导致浏览器之间出现严重分歧;
- 没有版本号 ≠ 不稳定。FAQ.md#L19-L21 明确说:整个标准大体都是稳定的,新增内容必须设计成熟、且至少有两个实现者支持才能进入。
一句话总结:🌱 与其给你一张"会过期的地图",不如给你一根"永远最新的指南针"。
三、HTML5 和 HTML 标准是什么关系?
简短回答:是的,它就是大家说的"HTML5"。
标准原文的说法是(FAQ.md#L11-L13):WHATWG 现在只维护"HTML",不再纠结版本号;当人们说"HTML5"时,通常指**"当前最新的 HTML 工作成果"**,而不是某个具体版本。
而且 HTML 标准远不止"标记语法"——它还定义了 Web 运行时的许多核心能力,比如媒体流(<video>的摄像头流采集与分发):
上图来自标准正文:HTML 标准如何定义摄像头/麦克风采集的
LocalMediaStream流向<video>与PeerConnection。
四、我的老页面会因此"失效"吗?
不会,也不用担心。两点澄清:
- 浏览器只有一套解析器,同时覆盖所有历史版本。带 HTML4、XHTML1 甚至没有 DOCTYPE 的
text/html文档,都用同一套解析算法处理(FAQ.md#L141-L145),不需要为每个旧版本单独写解析器——这对安全和维护都是好事。 - "合法性(conformance)"只是质量工具,用来帮你在新页面中避免拼写错误和坏实践,而不是给旧页面"判刑"(FAQ.md#L37-L41)。
所以:写新页面时建议对照最新规则校验;老页面则完全不必为"合不合法"焦虑。
五、没有 DTD 了,页面怎么校验?
早期 HTML 靠 DOCTYPE 引用 DTD 来校验,现在 DOCTYPE 只是个"模式切换开关",不带 DTD。
官方答案(FAQ.md#L147-L149):使用遵循最新规范的 HTML 校验器(validator)。校验器内部按最新规范实现检查逻辑,不需要 DTD 参与。
六、百年后的浏览器还能打开老 HTML 吗?
能,这正是标准的头号目标之一。
FAQ.md#L31-L35 写得很浪漫:HTML 标准的目标是"让几百年后的考古学家也能写出浏览器,并浏览任何年代写的 HTML"。没有版本号反而让这件事更容易——浏览器只需要实现"一套覆盖所有版本的规则",而不是 N 套互不兼容的版本。
标准对浏览器行为的定义细到令人发指,连键盘焦点如何移动、焦点顺序如何从焦点树推导都有明确规定:
上图是标准正文中的焦点树示意:数字标号表示焦点的候选与分配路径,帮助浏览器实现者精确对齐行为。
七、某个新特性我到底能不能用?
标准里"有"≠ 浏览器里"都能用"。官方推荐用实现状态查询工具来判断(FAQ.md#L57-L69):
- 浏览器兼容性查询表(caniuse)
- MDN Web Docs(各浏览器支持情况一目了然)
💡 经验法则:查不到"全绿"的特性,上线前加降级方案(fallback)。
八、标准文档有几种"读法"?
HTML 标准提供三种形式(FAQ.md#L51-L53):
| 形式 | 特点 | 适合谁 |
|---|---|---|
| 单页版 | 一页读完(⚠️ 非常巨大) | 搜索党 |
| 多页版(multi-page) | 按章节拆分 | 按需精读 |
| 开发者版(dev edition) | 自动剔除浏览器厂商才关心的细节 | 👍 新手首选 |
本仓库就是这套标准的托管仓库:source 是唯一的权威源文件,经构建工具处理生成上述各版本页面;dev/search.js 提供页内搜索,dev/styles.css 与 styles.css 负责渲染样式。
附:想动手体验?仓库自带 Demo
除了标准文本,仓库还有一批可交互示例 demos/,例如在 demos/workers/modules/page.html 里,你可以输入图片 URL(内置了一张机器人示例图)、选择滤镜,观察 Web Worker 在后台线程解码图片的全过程:
相关代码:worker.js 负责解码逻辑。类似的还有 demos/canvas/ 的 Canvas 示例、demos/workers/primes/ 的多线程质数计算等——读标准累了,跑个 demo 是最好的休息 😄
📌 小结(8 问速查):
- DOCTYPE 写
<!DOCTYPE html>,别无选择; - 没有版本号是因为 Living Standard 模式,追快照反而追到 bug;
- "HTML5" = 当前最新的 HTML 成果;
- 老页面不会失效,浏览器一套解析通吃所有版本;
- 校验用遵循最新规范的 validator,不需要 DTD;
- 百年后的浏览器也要能打开老 HTML——这是核心目标;
- 特性能不能用,查兼容性表 + MDN;
- 新手读"开发者版"最省力,想贡献就从 FAQ.md 这类文档读起。
【免费下载链接】htmlHTML Standard项目地址: https://gitcode.com/gh_mirrors/ht/html
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考