02-CSS3及其由来
1.1 CSS3及其由来
首先,我要谈谈CSS3究竟是什么、不是什么,还有它究竟有怎样的形式。WC3对CSS3所采取的方法和CSS2是截然不同的,所以,这一章对CSS3的概述应该有助于你理解什么时候可以使用CSS3、如何使用CSS3以及为什么它在不同浏览器上的实现有如此大的差异。
1.1.1 CSS3简史
当前所使用的CSS版本是CSS2.1,这是CSS2规范的修订版,最初发布于1997年。尽管从那时起,该规范就在不断地发展并接受评审,但是当许多人听到CSS2实际上并没有成为W3C的“官方”推荐时,仍然会感到惊讶(马上我就要谈到这一推荐过程)。更出人意料的是,2009年发布的Internet Explorer 8(IE8),居然宣称它是第一款完全支持整个CSS2.1规范的浏览器。
在过去的这几年,人们对CSS的谈论一直围绕着它的新版本CSS3而展开。虽然我说这是“新的”版本,但实际上,W3C对CSS3的工作从1998年就开始了,而那一年正是CSS2发布之后的一年。在CSS2发布之后,CSS2的浏览器实现仍旧参差不一,非常令人沮丧。所以W3C决定中断所有CSS新版本的工作,反过头来致力于CSS2.1的发展,至此,CSS的标准化之路才在现实世界中得以践行。直到2005年,所有的CSS3模块才被移回到草案状态,而对它的编辑与评审过程也再一次从头开始。
多年以来,Internet Explorer一直占据了不断扩张的Internet用户市场,但它并没有显露出实现CSS3的迹象。过去的这几年,新出现的各种全新的浏览器为了争夺用户而展开竞争,过多的选择也导致了一场浏览器特性的军备竞赛,而这场军备竞赛的一大受惠者,就是CSS3。每个浏览器都要为开发人员和用户提供最新的网页技术,同时,由于CSS3规范大部分已经完成了编写,对它的实现甚至是新特性的添加都已经完全没有了障碍。
所以,对今天的我们来说,已经可以使用CSS3规范进行有效的开发,大量的浏览器也致力于实现这一规范,而具有共同利益的开发者们也已经使用CSS3去构建网页,对它进行学习,写下了关于它的种种文章。这是一种健康发展的态势,也是我们在几年以前完全无法预见到的。
1.1.2 CSS3是模块化的
要成为这个世界上所有基于标记的文档的默认样式化语言,可谓是一项艰巨的任务,W3C也意识到这一目标需要花上许多年才能够实现。同时,W3C成员也逐渐意识到,当他们对一些更加深奥难懂的特性进行考虑和争辩时,不能够阻挡一些有明显需求的特性加入。所以,他们决定把CSS3分割为各个模块,这样每个模块就可以由不同的作者以不同的步调进行处理,其实现和推荐的过程(我马上会谈到)就可以错开进行。
这就是为什么我们现在拥有的是CSS3的基本用户界面模块、选择器级别3、媒体查询,等等,而不是一份单独的、完整的CSS3规范文档。有部分模块是CSS2.1的修正版,有一部分则是全新创建的,但是它们全部都打着CSS3的旗号。
会令我生气(我是一个随和的人)的少数几件事情中,其中一件事情是,我在许多博客上会听到人们抱怨:“我想要使用CSS3,但要等到它准备好还要好几年呢。”这种说法是毫无意义的,CSS3的一些模块在所有现代浏览器上都已经有了非常稳定的实现,而更多的模块距离实现它们的黄金时间可能不过就是几个月罢了。如果要等到所有这些模块在现有的每种浏览器上都能百分之百地实现,不得不等上很长一段时间。
但 CSS3 就在这里,其中有一些模块现在就可以使用了——我们仅仅需要考虑如何使用就行了。
1.1.3 模块状态与推荐过程
当我在这本书中前行,讨论每一种不同模块时,也会提到模块的状态。这种状态是由W3C设置的,它表示模块在推荐过程中的进展情况,但是要注意,该状态未必表示一个模块在所有浏览器中的实现程度。
当一份提议文档首次被接受为 CSS 的组成部分时,它的状态会被指定为工作草案(Working Draft)。这种状态意味着该文档已经被发布,并且正准备由社区进行评审——这种情况下,社区指的就是浏览器制造者、工作组和其他利益相关团体。一份文档也许会保持在工作草案状态很长一段时间并历经多次修订,而且并非所有的文档都能够通过这一状态等级,一份文档也可能会多次返回到该状态。
在文档可以从工作草案发展到一下阶段之前,它的状态会被修改为最终征求意见稿(Last Call)。这意味着一份文档的审核周期即将结束,通常也表明该文档已经准备好发展到下一级别。
接下来的这一级别称为候选推荐标准(Candidate Recommendation),意味着W3C已经确认该文档具有存在的意义,并且最新的评审也没有发现什么重大的问题,而所有的技术需求均已被满足。此时,浏览器的制造者也许就可以开始实现文档中的属性,收集现实世界的反馈。
当两个或更多的浏览器以相同的方式实现了这些属性,并且也没有暴露出严重的技术问题,一份文档就可以发展到提案推荐标准(Proposed Recommendation)。该状态意味着该提案现在已经成熟并且可以被实现,只需等待由W3C顾问委员会(W3C Advisory Committee)批准通过。当这一签注被同意之后,该提案就成为了一个推荐标准(Recommendation)。
对于前面简略谈及的内容,此处还要再重申一点,推荐过程与实现过程并不总是以相同的方式运作的。例如,在这本书的后面,我将会介绍一组模块,这组模块由WebKit团队在几年以前提出,其中包括了2D变换(2D Transformations,第12章介绍)。尽管该提案仍然处于工作草案状态,但这些属性在Firefox、Opera和基于WebKit的浏览器上已经有了很好的实现。
我在本章之前提到过的,即便是我们现在已经使用了很多年的CSS2.1也仍然没有达到完全推荐的状态。尽管CSS2.1几乎已经完成了,但仍然有一些语法和句式上的事情需要解决。很明显,这并不会阻碍浏览器充分实现它并转向CSS3。
因此,我在写这本书的时候,并没有严格根据模块推荐的状态进行叙述,而是按照特性实现的较为松散顺序进行讲解。前面的章节讨论的是在所有浏览器中都已经完全实现的特性(或者说截止本书发布为止);稍后的一些章节只涉及在某些浏览器上实现的特性,它们通常带有浏览器特定的前缀;而本书最后的章节则会谈及一些可能的、推测的或者有部分实现的属性。
1.1.4 CSS3并非HTML5
当前在Internet上随处可见的一个流行词就是HTML5。当然,HTML5是一种真正的(也是激动人心的)新技术,它莫名地超越了技术出版物,来到了主流媒体上。几乎在你所去到的每一个地方,人们都在讨论它。然而,在这一旅途中,它的正确含义似乎已经消失了。
在我解释为什么这么说之前,应该先说明,媒体并不应当单独承担使HTML的真正含义变得模糊的责任。许多开发人员都热衷于做出绚丽的“HTML演示”,但如果仔细地看看这些演示(或者浏览一下它们的源代码),通常都会发现这些演示几乎都没有包含实际的HTML5新特性,而是使用了大量的CSS3技术。
尽管HTML5为网页带来了许多非常酷的新特性,但CSS3带给我们的才是真正充满想象力的视觉效果:旋转、缩放、二维和三维动画、动态和装饰性的文本效果、阴影、圆角和渐变填充效果,所有这些都是CSS3带给我们的(在这本书中我会展示如何使用这些特性)。
媒体所谈到的HTML5,实际上是结合了CSS3、SVG和JavaScript的标记语言的新修订版本,对于许多人(包括我自己在内)来说,更愿意把它称为Web栈(或者是开放Web栈,Open Web Stack)的一部分。