摘要

  • CSS2 在 1998 年 5 月成为 W3C Recommendation。CSS2.1 明确要保留广泛实现的部分、吸收勘误、修改浏览器普遍偏离的规则,并删除没有实现的功能。
  • 2007 年的 Candidate Recommendation 要求每项功能至少有两个互操作实现。2011 年报告统计 9,418 项测试,其中 9,191 项必需行为测试由至少两个实现通过。

纸面标准先把胃口做大

CSS2 是写在纸面上的承诺。1998 年的文本描述了可下载字体、@font-face、字体匹配和庞大的格式模型。对作者来说,这很诱人:样式表可以先写出想要的效果,客户端以后再想办法找到字体或完成计算。

但每条规则也增加了解释债务。Recommendation 不是浏览器已经达成一致的证明。2008 年修订版 CSS2 甚至说明它不再维护,并把作者指向 CSS2.1。旧文档仍是历史记录,却不再是最好的共同指令。

实现证据变成门槛

CSS2.1 的引言把编辑政策写得很直白:保留普遍接受的部分,吸收勘误;如果实现普遍不同,就修改文本;删除没人实现的功能和将由 CSS3 接替的功能。2007 年 Candidate Recommendation 把它变成程序:两个互操作实现、公开测试、至少六个月 CR。没有实现或测试不足的功能可以被删掉。

变更记录展示了代价。font-stretch、font-size-adjust、@font-face 及相关字体匹配内容被移除,text-shadow、marker-offset 和若干列表值也被移除。它们不是没有想象力,而是不能充当共同底线。

九千多项测试换来更小的承诺

2011 年实现报告 测试了 24 个用户代理,来自七种渲染实现,覆盖八个操作系统。9,418 项测试中,9,191 项必需行为由至少两个实现通过。标准因此从愿望清单变成了可执行边界。

W3C 用删除 CSS2 的一部分换来稳定底座。作者失去了一些写在旧文档里的功能,却更可能在多个浏览器里得到相同结果。CSS 2.1 的胜利,就是把承诺缩小到测试和代码都能承受的大小。