[以下内容同时发布在“W3C资讯”微信公众号] CSS 的开发大致始于25年前,当时最初的设想是为偶尔带有图片的单列文本提供一些简单好用的样式。事实证明该技术十分受欢迎,它不但足够灵活而且使用范围也可以更广。 也是从那时起,我们开始不断地为 CSS 添加新功能。 现在的 CSS 已经可以应对多列、垂直文本、斜线文本、图形用户界面的布局、图像操作、动画、按键及鼠标交互等各类需求。
从1996年 CSS 被首次标准化以来,操作系统已经有十几个版本甚至更多,浏览器也经历了几十个版本的更迭。不少浏览器如今已经消逝,新的浏览器又不断出现。 CSS 也随之成长,但至今依然被称为 CSS。
有人认为存在着几个营销方面的问题。 W3C 从未大张旗鼓地隆重宣布 “CSS X” 已经具备的全部强大新功能。印象中 CSS 总在不定期地一点点增加新特性,可能很多人都未曾留意到。许多 Web 开发者也因时间或兴趣原因,不能实时关注 W3C 或各类软件制造商去了解 CSS 的新特性,他们可能是之后才偶然地留意到。对于想要推销自己的 Web 开发者来说也有问题:他们在简历中写些什么? 倘若写 “CSS专家” 其实很可能意味着十年前的 CSS。
在我们探讨是否有应对方案之前,让我们先来看看 CSS 的版本历史。
The original goal for CSS was to create a technology that provided good typography for simple documents.
正如上面提到的,1995年左右对 CSS 的最初设想是创建一项技术,为 Web 上的简单文档(例如 HTML 格式)提供好用的样式。尽管十分简单,但是与传统的文档布局相比,它对早期的 Web 浏览器来说还是一个挑战。 因此,我们在1996年率先对一小部分子集进行了标准化,并将其命名为第一版(level 1)。完整的 CSS 于两年后问世,即第二版(level 2)。
CSS 第二版实际上仍未达到最初的设想,这主要是由于浏览器遇到的困难比预期的要多(起初的主要版本甚至没有数据结构来存储文档树。而且由于担心破坏重要的网站,它们有着无法修复的 bug)。 然而无论如何 CSS 仍然很受欢迎,人们要求添加更多的特性。结果表明,语法和级联与继承系统可以支持更多的版式功能,且不会产生太多问题。
但 CSS 第二版规范已经是一个相当庞大的文档了,它分布在20多个 HTML 文件中。尽管有些新功能很简单,同时也有些功能似乎还需要更多研究。基于这些原因,工作组决定将 CSS 分解,将其转化为包含一系列更小规范的合集,并称它们为 “模块(module)”。每个模块各自包含一小部分关联属性或其他特性(selectors、@-rules等),且尽可能不依赖于其他模块。这意味着各模块可以按其自己的速度发展。此外,每个模块都足够小到可以放在一个 HTML 文件中,这使编辑和发布变得更加容易。
The full set of modules of CSS now includes everything from modules that are still level 1 to modules that are already level 5.
如此一来,CSS 被划分成了 “选择器”、“背景和边框”、“字体” 等模块。随着时间的推移,又添加了 “书写模式”、“网格”、“转换” 等新模块。1998年发布的模块在包含第二版(level 2)功能的同时添加了更多新功能,因此该模块被命名为第三版(level 3)。只包含新功能的模块则被命名为第一版(level 1),来表示它们不是任何规范的超集。久而久之,一些模块得到标准化,然后被扩展添加新特性,之后又再被标准化,因此完整的 CSS 模块集(包括已经标准化的和正在开发中的)涵盖了从现在仍是第一版到至今已经是第五版的所有模块。
换言之,整体的 CSS 不再划分 levels。它是一系列规范(模块)的集合,每个模块拥有各自的版本并随着新功能的添加而获得新版本。在任何时候,当前整体的 CSS 都被定义为所有稳定模块的集合。例如,去年12月 “CSS 写作模式第三版” 经历候选推荐标准(CR)最终成为 W3C 正式推荐标准(REC)。在那一刻 CSS 隐式地改变了:它不再是由该模块在 CR 阶段时定义的那样,而是由最新发布的 REC 所定义。但是,没有任何新发布的规范被称为 “CSS”。
这对工作组来说是很好的模式,他们可以随时发布 CSS 新功能,而无需等到不相关的性能就绪。这也适用于规范实施者,他们只需要知道 CSS 由哪些模块组成,且其中哪些模块已经是稳定可被实现的(工作组以 CSS 快照的形式提供这些信息,快照文档每隔一年左右更新一次;工作组页面也列出了小组当前工作)。
The best known sources of implementation status are probably MDN and Can I Use.
这是否适用于使用 CSS 编写样式表的人?工作组很久以前就决定向规范实现者(例如浏览器和软件开发商)提供准确且有用的信息。工作组不会有足够的资源向用户提供同等级别的信息,它没有研究 CSS 的某部分得到了多大范围的实现以及可用于哪些目的。
工作组更关注一项规范是否是可实现的。通常情况下,如果两家独立的软件厂商成功地实现了一项特性,那么就足以证明该特性是可行的。一般围绕一份规范会有两个以上的独立实现,有时也需要一段时间其他软件厂商才会考虑实现该特性。与大多工作组相同,CSS 工作组在规范发布后不会主动跟踪规范的实现情况。幸运的是有其他人在做着这项工作,其中广为人知平台可能是 MDN 和 Can I Use,它们跟踪规范在几个主要浏览器中的实现状态。此外,最好的情况来源是实现了该规范的软件产品本身的文档。
‘A tremendous number of books, courses, and conferences were dedicated to CSS3.’
回到为开发人员定义整体 CSS 版本(version)的问题:以何种方式定义才更有用?新版本应该多久定义一次?谁来定义?
CSS 有诸多用途。对移动应用程序和 Web 页面来说可用的属性集是不同的。倘若你是一个用 CSS 布局书籍的出版商,那么可用的属性则又不同。也许应该有不同系列的 CSS 版本用于不同的目的。
要想切实可用,在定义一版 CSS 时,它应该同时得到现实合理的实现,这样开发人员才有必要开始学习这一版本。这反过来又会激励其他软件厂商去实现它。那么“合理的实现”的衡量标准又是什么?
人们认为应该定期发布新版本,但又不希望太过频繁,因为没时间阅读太多的通知消息。人们想要将新版本编辑成书,或是开发相关的报告和课程,这些都需要时间。引用 Chris Coyier 的话:“正如 Jen Simmons 所写,已经有大量专门介绍 CSS3 的书籍、课程和会议”,然而关于什么是 CSS3 还没有定义,工作组显然也从未定义过。
新版本之间的间隔也不应太久,因为如果新特性几年都没被收录,那也将是一种浪费。
至于谁可以定义一个整体的 CSS 版本?CSS 工作组本身似乎很难有时间。Fantasai 建议工作组充当发行者的角色,同时可以有这样一个委员会,成员由 Web 开发者所在的各公司推荐,委员会通过定期会议来决定是否应该开发新版本,以及新版本应该收录什么。近期成立的CSS4 社区组或许是推动成立这样一个委员会的渠道。
按照 Peter-Paul Koch 的说法,甚至不需要对 “CSS X” 给出精确的定义。大概每三年选取一些在此期间添加的新模块,并将它们依次写入相应的 “CSS 4”、“CSS 5” 等版本中。他还认为 CSS X 可以是其中两个新模块,再加上先前版本中的所有内容,以及一组松散定义的其他模块的集合。
更多内容,参见:
* @w3cdevs 介绍了关于 CSS 版本的历史
* Rachel Andrew 在《Smashing》杂志上关于 CSS 版本的总结文章
* 所有的 CSS 模块列表
[以上内容译自 CSS 创始人之一 Bert Bos 的博客文章,原文在这里]
评论已关闭