CSS的开发始于大约25年前。最初的目标是为单列文本和偶尔出现的图像提供一些好的但简单的排版。但事实证明,这项技术很受欢迎,而且足够灵活,以至于范围可以扩大得更广。从那时起,添加新功能的工作就没有停止过。CSS现在可以处理多列、竖排文本、对角文本、图形用户界面布局、图像操作、动画、一些按键和鼠标交互等。
自从1996年CSS第一次标准化以来,许多操作系统已经有了十个或更多的新版本,浏览器已经通过了几十个版本。许多浏览器完全消失了,并创建了几个新的浏览器。CSS也在增长,但它仍然被称为CSS。
根据一些人的说法,这是一个问题,特别是营销问题,而且是不止一个方面的问题。这对W3C来说是个问题,因为从来没有什么大事宣布‘CSSX’已经带来了所有伟大的新功能。取而代之的是,新的可能性以不规则的间隔逐渐增加,许多人都没有注意到。对于Web开发人员来说,这也是一个问题,他们中的许多人没有时间或兴趣关注W3C或各种软件制造商,看看CSS中有什么新东西。他们可能只是在后来才意外地意识到新功能。对于想要推销自己的网络开发人员来说,这是一个问题:他们在简历中写了什么?如果他们写的是“CSS专业知识”,那么它可能也意味着CSS,就像十年前的当前状态一样。
在我们看到是否有解决方案,如果有,谁来负责之前,让我们先看看为什么CSS是这样的。
CSS最初的目标是创建一种能够为简单文档提供良好排版的技术。
正如我在上面说过的,CSS在1995年左右的最初目标是创建一种技术,为Web上的简单文档(如HTML文档)提供良好的排版。尽管它很简单,但与传统的文档布局相比,它对早期的Web浏览器来说是一个挑战。出于这个原因,一个小的子集首先在1996年被标准化,命名为“1级”。两年后,全面的CSS紧随其后,被称为“二级”。
CSS级别2实际上仍然没有达到最初的设想,主要是因为浏览器的难度比预期的要大。(主要的开始甚至没有数据结构来存储文档树。他们也有无法修复的漏洞,因为他们害怕破坏重要的网站。)。但是CSS从未被证明是受欢迎的,人们要求更多的功能。事实证明,语法和级联继承系统可以支持更多的排版功能,而不会出现太多问题。
但是CSS Level 2的规范已经是一个相当大的文档,分布在二十多个HTML文件中。虽然有些要求的新功能很容易,但有些看起来可能需要研究一下。出于这些原因,工作组决定将CSS拆分,并将其转变为一系列较小的规范,称为“模块”。每个模块包含一小组相关属性或其他特性(选择器、@-规则等),并且对其他模块的依赖尽可能少。这意味着它可以按照自己的速度发展。此外,每个模块都足够小,可以放入单个HTML文件中,使编辑和发布变得容易得多。
CSS的全套模块现在包括了从仍然是1级的模块到已经是5级的模块的一切。
CSS因此被分成“选择器”、“背景和边框”、“字体”等模块。随着时间的推移,又添加了新的模块,如“书写模式”、“网格”和“转换”。包含已在1998年发布的第2级功能的模块称为“第3级”,以表示它们包含第2级或更高级别。只有新特性的模块被命名为“级别1”,这表明它们不是任何东西的超集。随着时间的推移,一些模块变得标准化,然后使用新请求的功能再次扩展,再次标准化,等等,因此CSS的全套模块,无论是标准化的还是开发中的,现在都包括从仍然是第1级的模块到已经是第5级的模块。
换句话说,CSS作为一个整体不再有级别。取而代之的是一系列规范(模块),随着新功能的添加,它们各自获得了新的级别。在任何时刻,当前CSS被定义为所有可稳定模块的集合。例如,去年12月,模块“CSS WritingModes Level 3”作为W3C推荐发布。在那一刻,CSS隐含地改变了:它不再由先前发布的该模块的候选推荐来定义,而是由新的推荐来定义。但没有任何名为“CSS”的文档的新出版。
这对工作组来说很有效,他们可以在CSS的新功能准备就绪时发布它们,而不需要等待其他无关的功能也准备就绪。它也适用于实现者,只要他们知道哪些模块组成CSS,哪些模块是稳定的。(工作组提供这些信息,特别是以CSS快照的形式,大约每隔一年更新一次。W3C还有一个网页,显示工作组当前的工作。)。
但是它对使用CSS编写样式表的人有效吗?工作组很早以前就决定,它的任务是为实施者提供准确和有用的信息,即浏览器和其他处理CSS的软件的制造商。它无论如何都没有足够的资源来向用户提供相同级别的信息。特别是,它没有研究CSS的某些部分是如何实现的,从而没有研究它可以用于什么目的。
工作组确实研究了实现,但仅限于检查规范是否可简单实现所需的范围。通常,如果两个软件制造商成功实现了一个功能,就足以证明该功能是可行的。通常有两个以上的实现,但有时在其他软件制造商开始实现该功能之前,SIT需要时间。CSS工作组与CSS中的大多数工作组一样,在规范发布后并不积极遵循实现状态。幸运的是,还有其他人这样做。最广为人知的实现状态来源可能是MDN,我可以使用它吗,至少在几个知名的浏览器中是这样。对于其他软件,最好的来源通常是软件自己的文档。
回到为开发人员定义CSS版本的问题上:如何以有用的方式定义它?新版本应该多久定义一次?谁能给它下定义呢?
CSS有很多用途。移动应用程序和网页应用程序的有用属性集是不同的。如果你是一个用CSS排版书籍的人,有趣的属性又一次不同了。也许应该有不同系列的CSS版本用于不同的目的。
为了有用,CSS的一个版本在定义时应该在实现中得到合理的支持,这样Web开发人员开始学习该版本就有意义了。这反过来又激励其他软件制造商也实施它。“合理支持水平”的标准是什么?
人们争辩说,应该有一定频率的新版本。但不会太频繁,因为人们没有时间阅读太多公告。人们会想要写关于新版本的书,或者开发关于它的讲座和课程,这需要时间。正如珍·西蒙斯沃罗特(Jen Simmonswrote)引用克里斯·科伊尔(Chris Coyier)的话说的那样,“大量的书籍、课程和会议都致力于CSS3”,尽管CSS3是什么没有定义。工作组肯定从未定义过它。
而且新版本之间的距离也不应该太远,因为如果几年内不采用有趣的新功能,那将是一种浪费。
谁可以定义CSS版本呢?CSS工作组似乎觉得没有时间做这件事。范塔赛建议,工作组可以只担任出版商。也许可以成立一个由不同的网络开发者组织提名成员的委员会。他们会每隔一段时间会面一次,以决定是否应该有一个新的版本,如果是的话,它包含什么。或者,上个月成立的CSS4社区小组找到了成为这样一个委员会的方法。
根据彼得-保罗·科赫(Peter-Paul Koch)的说法,甚至不需要对“CSS和X”给出准确的定义。每隔三年,一些人应该挑选几个在那个时期添加的有趣的新模块,并开始撰写关于它们的文章,标题分别是“CSS+4”,然后是“CSS+5”,以此类推。“CSS*X”被定义为这两个左右的模块,加上以前版本中的任何模块和一组定义松散的其他模块。
我们的W3C开发人员的Twitter账户在几条推文中给出了CSS级别的历史记录。