为什么不会有 CSS4 了?

2,426 阅读4分钟

简单地说,就是从 CSS3 开始,CSS 规范就被拆成众多模块(module)单独进行升级,或者将新需求作为一个新模块来立项并进行标准化。因此今后不会再有 CSS4、CSS5 这种所谓大版本号的变更,有的只是 CSS 某个模块级别的跃迁。

引入模块化之前

按照 CSS 工作组的说法,CSS 历史上并没有版本的概念,有的只是 “级别”(level)的概念。比如,CSS3 其实是 CSS Level 3,CSS2 是 CSS Level 2,而 CSS Level 1 当然就是 CSS1。每个级别都以上一个级别为基础。

大家都知道,CSS1 早就作废了。CSS2 其实基本上也已经作废了。但是,CSS1、CSS2(以及 CSS2.1)在当时都是一个大而全的规范。而且,CSS2 在成为最终标准的时候,W3C 规范的流程里还没有定义 CR 这个阶段。

后来,W3C 进一步完善了规范制定流程,要求每个规范都要经过以下五个阶段:

  1. 工作草案(WD,Working Draft)
  2. 最终工作草案(LC/LCWD,Last Call Working Draft)
  3. 候选推荐(CR,Candidate Recommendation)
  4. 提议推荐(PR,Proposed Recommendation)
  5. 推荐标准(REC,Recommendation)

由于当初 CSS2 并没经过 CR 阶段,因此出现了很多问题。CSS 工作组被无穷无尽的 “改 bug” 搞得不厌其烦。结果,他们决定对 CSS2 进行一次修订,这就是 CSS2.1(CSS Level 2 Revision 1)。换句话说,CSS2.1 其实只是 CSS2 的一个修订版,并没有实质性变化。有些 CSS2 中的内容,CSS 工作组认为不够成熟,于是从 CSS2.1 中删除了。这些删除的内容被视为回退到流程的 CR 阶段——相当于需要“回炉”。(后来,这些内容基本都以 CSS 模块的方式,经过修订和增补,进入了 CSS Level 3。)

CSS2.1 及之前的 CSS 规范把所有内容都写在一个文档里。随着 CSS 特性越来越多,越来越复杂,CSS 规范的篇幅也越来越长。CSS2.1 的 PDF 版有 430 页(www.w3.org/TR/CSS2/css…)。这就给勘误和进一步升级带来了极大不便。因为文档不同部分升级的进度不可能强求一致。

于是,CSS 工作组决定从 CSS2.1 之后开始采取模块化的路线。就是把需要升级的内容独立成模块拆分出来,新增的需求也以新模块的方式立项。从此以后,CSS 就进入了 Level 3。

引入模块化之后

CSS 采取模块化路线后,就有了三种模块,而且它们的命名方式非常值得注意。

  • CSS Level 2 原有模块:Selector、Color、Values and Units、BackgroundS and Borders 等这些都是从原来 CSS 规范中拆出来的模块。这些模块的命名一开始就会从 Level 3 开始,比如 Selectors Level 3(www.w3.org/TR/css3-sel…)、CSS Backgrounds and Borders Level 3(www.w3.org/TR/css3-bac…),因为它们都是在 CSS Level 2 的基础之上开始的。
  • 新模块:Multi-column Layout、Transitions、Flexible Box、Transforms 等都是后来新增的模块,以前 CSS 中不存在类似特性。因此它们的命名会从 Level 1 开始,比如 CSS Transitions Level 1(www.w3.org/TR/css3-tra…)、CSS Flexible Box Module Level 1(www.w3.org/TR/css-flex…)。
  • 当然,还有 CSS2.1 从 CSS2 中删除的内容。如前所述,“被 CSS2.1 删除的 CSS2 中的内容,被视为回退到 CR 阶段”,而其中大部分内容都会以 CSS Level 3 的面目 “转世”,一旦它们进入 CR 阶段,就会取代之前对应的内容成为新标准。

OK,上述任何模块的规范从 WD 推进到 REC 阶段,要么意味着新 CSS 模块诞生,要么意味着旧 CSS 模块重新焕发了生机!

希望下面这张图能更直观地说明 CSS 模块的命名:

模块还会有 Level 4 或更高

CSS 到 Level 3 因为采取了 “模块化” 策略,本身不会再进化到 Level 4 了。正因为如此,CSS 理论上永远不会出现 CSS4。但是,CSS 中的某个模块是可以到 Level 4 甚至更高级别的。比如,CSS Color Module 就开始 Level 4 的升级之旅了(www.w3.org/TR/css-colo…)。

CSS snapshot 2017 里是这么说的(www.w3.org/TR/CSS/#css…):

There is no CSS Level 4. Independent modules can reach level 4 or beyond, but CSS the language no longer has levels. ("CSS Level 3" as a term is used only to differentiate it from the previous monolithic versions.)

没有 CSS Level 4。独立的模块可以到 Level 4 或更高级别,但 CSS 这门语言不会再有这个级别。(“CSS Level 3” 作为一个概念,只是便于跟之前大而全的版本有所区别。)

以下是几个有用的参考链接。

有什么不明白的,欢迎大家留言!