- 原文地址:www.w3.org/blog/2020/0…
- 原文作者:Bert Bos
- 译者:SevenOutman
正文
CSS 开发始于大约 25 年前。最初的目标是为偶尔出现图像的单列文本提供一些良好而简单的排版。但是事实证明,该技术很流行,而且足够灵活,可以用在更多的地方。从那时起,添加新功能的工作一直没有停止。 CSS 现在可以处理多列,垂直文本,对角线文本,图形用户界面的布局,图像操作,动画,一些按键和鼠标交互等等。
自 1996 年 CSS 首次标准化以来,许多操作系统已经拥有十个或更多新版本,浏览器经历了数十个版本。许多浏览器完全消失,而一些新浏览器也被创造出来。 CSS 也在成长,但仍被称为 CSS。
一些人认为,这是一个问题,是个营销问题,是个大问题。对于 W3C 来说,这确实是一个问题,因为从来没有什么大事件可以宣布“CSS X”已经具备了所有强大的新功能,而是新的可能性一点点地以不规则的间隔被添加,无人知晓。对于 Web 开发人员来说,这也是一个问题,他们当中许多人没有时间或兴趣去关注 W3C 或各种软件制造商来了解 CSS 的新功能。他们可能稍后才偶然发觉新功能。对于想要推销自己的 Web 开发人员来说,这也是一个问题:他们在简历中放了什么?如果他们写“CSS 专业知识”,那么就很可能意味着十年前的CSS。
在我们探讨怎么办,谁来办之前,首先让我们看看为什么 CSS 是这样。
CSS 最初的目标是创建一种为简单文档提供良好排版的技术。
就像我在上面说的那样,CSS 在 1995 年左右最初的目标是开发出一种技术,为 Web 上的简单文档(例如 HTML)提供良好的排版。与传统的文档布局相比,它是如此的简单,对早期的Web浏览器来说是一个挑战。因此在 1996 年时,一个小的子集首先被标准化,称为“level 1”。完整的 CSS 于两年后问世,称为“level 2”。
实际上,CSS level 2 仍未达到最初的设想,这主要是由于浏览器的难度超出了预期。(当初的主流浏览器甚至没有数据结构来存储文档树。而且它们具有无法修复的 bug,怕破坏重要的网站。)但是 CSS 仍然很受欢迎,人们要求更多的功能。事实证明,级联和继承语法以及系统可以支持更多的排版能力,而不出太多问题。
但是 CSS level 2 的规范已经是一个很大的文档,分布在几十个 HTML 文件中。而且,尽管某些要求的新功能很容易,但有些似乎需要进一步研究。出于这些原因,工作组决定将 CSS 拆分为一套较小的规范,称为“模块”。每个模块都包含一小组相关属性或其他功能(选择器,@-规则等),并且尽可能少地依赖于其他模块。这意味着它可以以自己的速度进行开发。而且,每个模块都足够小,可以放入单个 HTML 文件中,从而使编辑和发布变得更加容易。
全套 CSS 模块现在包括从仍在 level 1 的模块到已经 level 5 的模块的所有内容。
CSS 就这样被拆分成“选择器”,“背景和边框”,“字体”等模块。随着时间的推移,新的模块被添加进来,例如“书写模式”,“网格”和“变换”。包含 1998 年发布的 level 2 的功能的模块称为“level 3”,表明它们包含 level 2 和更多特性。仅具有新功能的模块被命名为“level 1”,表明它们不是任何东西的超集。随着时间的流逝,一些模块被标准化,然后再次扩展加入新的功能,再次被标准化…就这样,完整的 CSS 模块,无论已标准化的和正在开发的,二者现在都包括从仍在 level 1 的模块到已经 level 5 的模块的所有内容。
换句话说,CSS 这个整体不再分什么 level。它现在是一个规范族,各个规范(也就是模块)各自独立地添加新功能,获得新的 level。在任何时候,当前 CSS 被定义为所有稳定模块的集合。例如,去年 12 月,模块“CSS Writing Modes Level 3”发布为 W3C Recommendation。就在那一刻,CSS 悄悄地发生了变化:它不再由这个模块的先前发布的 Candidate Recommendation 定义,而是由新的 Recommendation 定义。但是,不会有任何叫“CSS”的新发布。
这对于工作组来说效果很好,他们可以在 CSS 新能力就绪时就发布,而无需等待其他无关的特性。对 CSS 的实现者来说也一样——只要他们知道组成 CSS 的模块以及其中哪些模块是稳定的。(工作组以 CSS 快照的形式提供该信息,每隔一年左右更新一次。W3C 还有一个网页展示工作组当前的工作。)
但这对使用 CSS 编写样式表的人有用吗?工作组很久以前就决定,其任务是为实现者,即浏览器和其他处理 CSS 的软件的制造者,提供准确而有用的信息。无论如何,它不会有足够的资源为使用者提供相同级别的信息。尤其是,它没有研究 CSS 的各部分的实现范围及其用途。
工作组确实也研究实现,但仅仅是必要地检查下规范是否可以实现。通常,如果两家软件制造商成功实现一项特性,则足以证明该特性是可行的。通常都有两种以上的实现方式,但是有时其他软件制造商需要花一些时间才能实现该特性。与 CSS 中的大多数工作组一样,CSS 工作组在规范发布后不会经常跟进实现状态。幸运的是,有其他人会跟进。实现状态最知名的来源可能是 MDN 和 Can I Use,至少几种知名浏览器的实现状态它都有。对于其他软件,最好的来源通常是该软件自己的文档。
“有大量有关 CSS3 的书籍,课程和会议。”
回到为开发者定义 CSS 版本的问题:如何以有用的方式定义 CSS 版本?应该多久定义一次新版本?谁能定义呢?
CSS 用于许多方面。对移动应用和对网页而言,有用的 CSS 属性是不同的。而且,如果您是使用 CSS 布局书籍的出版商,那么关注的属性也会有所不同。也许应该为了不同的目的出不同系列的 CSS 版本。
为了有用,一个 CSS 版本被定义时,它应该已大体上被支持了,Web 开发者才好开始学习该版本。反过来,这也激励其他软件制造商来实现它。那怎么才符合“大体上支持了”呢?
人们主张按照一定频率更新版本。但不要太频繁,因为人们没时间阅读太多公告。而且人们要为了新版本写书、开讲座或者课程,这需要时间。就像 Jen Simmons 所写的,引用 Chris Coyier 所说,尽管并没有定义说 CSS3 是什么,仍然“有大量有关 CSS3 的书籍,课程和会议”。工作组当然从来没有对其进行定义。
而且新版本之间也不能隔太久,如果几年都没有找到有趣的新功能,那将是浪费。
谁可以定义 CSS 版本? CSS 工作组似乎没时间来做这件事。 Fantasai 建议工作组可以仅作为发布者。也许可以有一个委员会,成员由各种 Web 开发组织提名。他们隔一段时间会开会决定是否应该有一个新版本,如果有的话,它包含什么。也许上个月成立的 CSS4 社区小组就找到了成为这样的委员会的方法。
根据 Peter-Paul Koch 的说法,“CSS X”的精确定义甚至并不需要。每隔比如三年,一些人会选择几个这段时间里添加的几个有趣的新模块,开始为他们写文章,题为“CSS 4”,“CSS 5”等等。“CSS X”就定义为这几个模块,加上上个版本中的所有内容,以及松散定义的一组其他模块。
补充阅读:
- 我们的 W3C 开发者 Twitter 帐户通过一些推文提供了 CSS levels 的历史。
- Rachel Andrew 在 Smashing Magazine 中总结了讨论内容。
- CSS 模块的完整列表,包括尚无法使用的模块。