今天所有前端都在写 HTML。

可很少有人会先问一句:

为什么浏览器要对那么多根本不该工作的页面继续负责?

为什么 Web 世界宁愿把错误处理写进标准,也不肯像 XML 那样,遇到错误就干脆判死?

为什么很多人一边嫌 HTML 老旧、松散、历史包袱重,一边又不得不承认:你离开它,那套所谓“开放 Web”就很难继续维持现在这副样子?

这套 《HTML 江湖》,想讲的就是这些事。

它不是教程。

也不是版本号流水账。

它更像一部长剧。

而且是那种一开场就知道后面要打很多年的长剧。

你可以把这套系列先记成四个镜头:

  1. 1992 年,CERN 那页 MarkUp 文档还在说:浏览器不认识的标签,先忽略。
  2. 90 年代中后期,浏览器大战把 HTML 从共享语言打成一堆方言。
  3. 2004 年,WHATWG 公开表态:官方不接这摊活,我们自己做。
  4. 2019 年,W3C 和 WHATWG 终于承认:两套都自称权威的 HTML 规范,对社区有害。

这四幕一连起来,你就会看见这套系列真正要讲的东西。

不是标签史。

是争夺史。

HTML 的历史,不是一门标记语言如何不断升级的历史,而是开放 Web 如何在理想秩序、厂商竞争、坏页面现实与用户连续性之间,硬生生妥协出一套活得下去的制度。


这套系列讲什么

我想讲的,不只是“某个标签什么时候出现”,而是更底下那几场反复重演的冲突:

  • HTML 为什么一开始更像文档语言,而不像应用界面语言
  • 浏览器大战为什么会把 HTML 打成一堆私货和历史债
  • XHTML 为什么当年看起来那么像正路,最后却还是输了
  • WHATWG 到底是怎么把“实现者旁路”变成主线的
  • HTML5 最关键的一步,为什么不是加新标签,而是把脏活写进规则
  • 浏览器为什么直到今天还得继续保护那些写得很烂、但用户仍在访问的页面

换句话说,这是一套关于 HTML 标准史、浏览器权力史,以及开放 Web 现实逻辑 的系列文章。


这套系列真正要追的,不是标签,是冲突

如果你退一步看,会发现 HTML 这些年的很多争论,表面上主角不同,底下却一直在重复几类老问题。

01|理论纯洁,还是互联网不能断电

XML/XHTML 那条路并不是没人信。

恰恰相反,它当年特别像正路:

  • 语法更严格
  • 结构更清楚
  • 验证更可靠
  • 出错就该报错

问题是,Web 不是一张空白试卷。

它是已经跑了很多年、挂着无数旧页面、旧工具、旧 CMS、旧作者习惯的现实系统。

所以当有人说“以后大家都该按纪律来”,真正冒出来的问题不是这句话对不对。

而是:

谁来替整个互联网付切换成本?

这就是 HTML 长期面对的第一层冲突:

你到底是要一门更纯粹的语言,还是一个不会轻易把旧世界炸掉的平台?

02|规范应该指挥现实,还是追认现实

很多规范的理想写法是:

先设计一个更好的世界,再要求实现去靠拢。

HTML 后来却越来越发现,自己不能只写“理想情况该怎样”。

它还得写:

  • 页面写错了怎么办
  • 标签乱嵌套了怎么办
  • 历史包袱还在跑,浏览器应该怎么兜底
  • 大家早就这么用很多年了,标准到底认不认

所以 HTML5 最深的一步,不是加了几个语义标签。

而是它终于承认:

如果你想让浏览器真正互通,就不能假装现实网页不存在。

03|HTML 是文档语言,还是应用平台的一部分

早期 HTML 的气质非常鲜明。

它更像给文档、链接、结构化信息服务的标记系统。

可后来整个 Web 的使用方式变了。

网页越来越像:

  • 应用界面
  • 交互容器
  • 发布平台
  • 商业系统的前台

这时候,HTML 再想只做一门温和的文档语言,就已经不现实了。

很多围绕 HTML5 的争论,本质上都不是“某个标签要不要加”。

而是:

Web 到底还把自己当文档系统,还是已经承认自己是应用平台。

04|谁有资格代表 Web 的现实

这也是后面会越来越明显的一条线。

W3C 有程序、流程、委员会、Recommendation。

浏览器实现者则有另一种更粗暴的合法性:

我真的在运行全世界的网站。

所以 WHATWG 和 W3C 的冲突,从来不只是“谁脾气更大”。

它底下真正争的是:

是正式标准流程更有资格定义未来,还是正在替现实买单的人更有资格定义现实?

05|作者可以犯错,但用户不能陪葬

这可能是 HTML 最不浪漫、却也最重要的一条原则。

很多工程师看到浏览器对坏 HTML 那么宽容,第一反应会是:

这不是在纵容低质量代码吗?

可浏览器面对的从来不只是作者。

它还面对用户。

作者写坏了页面,用户却还是想看内容、下订单、查信息、提交表单。

于是开放 Web 被逼着做了一个非常现实的选择:

作者可以犯错,但用户不能陪葬。

这条逻辑,后来几乎渗进了 HTML 的整个制度气质里。


为什么今天的前端还得关心这些旧账

因为你今天面对的,其实不只是 HTML 语法。

你面对的是一整套由 HTML 历史塑造出来的平台哲学。

比如:

  • 为什么浏览器对兼容性的执念这么重
  • 为什么“语义化”永远像共识,却又永远吵不完
  • 为什么很多 Web API 和解析规则看起来有些别扭,却又轻易动不得
  • 为什么标准组织经常不是在设计一个更完美的新世界,而是在想怎么别把老世界搞死

如果不看这些过程,你就很容易把今天的 HTML 误以为是一套天然如此、平滑长出来的东西。

它不是。

它更像一座一直有人居住、因此永远不能整体推倒重建的老城:

  • 有的街区,原本规划得很理想,后来被现实改得面目全非
  • 有的路,明知道绕,却因为人已经走惯了,谁也不敢硬封
  • 有的建筑,图纸很漂亮,但整座城最后根本不愿意给它腾地方

看懂这些,你回头再看 HTML,就会更明白:

它很多让人皱眉的地方,不只是“设计不够好”,而是“历史不允许它轻易更好”。


推荐阅读顺序

01|HTML 江湖(一):谁有权定义网页长什么样?

从 HTML 最早的文档气质讲起。看懂这篇,你会知道:Web 一开始并不是给今天这种网页和应用准备的。

02|HTML 江湖(二):标准还没站稳,浏览器已经先往 HTML 里塞私货

浏览器大战怎么把 HTML 打成方言集合,又留下了一大堆历史债。

03|HTML 江湖(三):W3C 为什么想把 Web 带回 XML

XHTML 为什么当年那么像“正路”,最后却还是败给了现实。

04|HTML 江湖(四):WHATWG 是怎么从边缘阵营变成主线的

这篇最像权力斗争片。它讲的是:官方没继续推 HTML 的时候,为什么浏览器厂商决定自己来。

05|HTML 江湖(五):HTML5 为什么不是一次升级,而是一次招安

这是整套系列里最关键的一篇之一。它会告诉你:HTML5 最狠的一步,不是发明新标签,而是把坏网页的活法写进规则。

06|HTML 江湖(六):Living Standard 之后,到底谁在定义 HTML

从这里开始,问题已经不再只是“HTML 长什么样”,而是“开放 Web 到底由谁治理”。

07|HTML 江湖(七):HTML 为什么最终没有追求完美,而是追求不坏

收束篇。最后会回到那条最现实的判断上:浏览器之所以看起来宽容,不是因为没原则,而是因为开放 Web 选择先保连续性。


为什么想写这套

因为今天很多前端对 HTML 的印象,也大多只是结果,不是过程。

大家知道:

  • HTML 很基础
  • 语义化很重要
  • HTML5 是一轮升级
  • XML/XHTML 是一些“老古董”路线

可并不知道这些东西背后:

  • 曾经争过什么
  • 谁想把 Web 管得更严格
  • 谁坚持现实世界不能这么切
  • 为什么错误处理、兼容规则、宽容解析,最后会变成 HTML 的核心制度

而我一直觉得,如果不看这些过程,你就很容易把 HTML 误会成一门只是“历史久一点的基础语言”。

它不是。

它更像开放 Web 的一部长期宪法:

  • 一边记着最初的理想
  • 一边背着市场竞争留下的债
  • 一边还得保证整套系统别在现实里塌掉

看懂它,某种程度上也就是在看懂:

开放 Web 为什么直到今天,还只能接受这样一种并不完美、却极难替换的现实。


先记住:HTML 最后没有变得更纯,它变得更不愿让互联网断电

如果你平时把 HTML 当成空气,这套系列也许能让你第一次认真意识到:空气也是有历史的。

如果你平时嫌 HTML 太旧、太松、太不讲究,这套系列也许会让你稍微理解它一点。

因为你会发现:

HTML 最终没有成为一门更完美的语言,它成为了一门更不愿意让互联网断电的语言。


关键人物速览

  • Tim Berners-Lee:万维网与早期 HTML 的核心发起者。整套 HTML 江湖 的第一层矛盾,几乎都要从他当年把 Web 先当作文档网络来设计说起。
  • Dave Raggett:早期 HTML 重要推动者和回顾者之一。理解 HTML 为什么带着明显的 SGML 与文档结构底色,绕不开他的材料。
  • Ian Hickson:WHATWG / HTML5 这条线上的关键人物之一。后面写到 parser、错误处理、Living Standard 时,他几乎都会在场。
  • Anne van Kesteren:WHATWG 与 HTML parser 历史的重要亲历者和记录者。很多“标准如何开始接管现实网页”这件事,透过她的回顾会特别清楚。

参考与延伸阅读

  1. WHATWG HTML Standard Introduction
    https://html.spec.whatwg.org/multipage/introduction.html

  2. HTML Design Principles
    https://www.w3.org/TR/html-design-principles/

  3. HTML5 Differences from HTML4
    https://www.w3.org/TR/html5-diff/