CSS的起源

  CSS       2015-11-08

CSS开始发展于1994年。《Cascading Style Sheets: Designing for the Web》的作者之一Hakon Wium Lie在Web的发源地欧洲原子核研究会(CERN)工作,此时Web开始被用于电子刊物发布的平台。可是,一个重要部分被遗漏了,那就是如何去展现文档。例如:无法像报纸一样对Web文档进行排版。在MIT多媒体实验室工作致力于研究个性化新闻呈现的Hakon看到了对Web文档添加样式的迫切需求。

在浏览器中添加样式表并非全新的概念,1990年HTML发展之初文档结构和布局分离便在考虑之内。蒂姆·伯纳斯-李(Tim Berners Lee,WWW的发明人)实现了基于浏览器的下一代文本编辑器,在此编辑器内可以添加几个带有样式的标签。然而,他并没有进一步开发样式规范,在他看来,如何呈现内容给用户是浏览器应该考虑的问题。在此期间,浏览器还包括Viola(Pei Wei,1992)和Harmony浏览器。Hyper-G系统是Web早期的竞争者,它也有自己的样式语言。

初始时,浏览器厂商并不提供高级别的样式文件,只提供一些简单的样式选项供用户选择。1993年,对Web有重大影响的NCSA Mosaic(网景公司的浏览器)发布。在样式方面,它只允许用户修改颜色和字体。

与此同时,站长们开始抱怨他们无法对Web页面调整出他们期望的样子(译者注:类似于Word中的样式),对于新手来说更不知如何去改变元素的字体和颜色,此时HTML并没有正确的表现出它的功能。下面这是摘自1994年发送给WWW制定者的一段话,这段话把Web开发者和浏览器厂商紧张的气氛表露无遗:

实际上,过去几年我很高兴告诉那些想把他们的文档设置成类似于TeX、Word等文本处理器中样式的人,对他们说:“对不起,你们被’绑架’了”。

这条信息出自Marc Andreessen(马克·安德森,NCSA Mosaic的作者之一)之手,他后来成为网景公司的联合创始人。在他看来,格式化的方式已经发生改变。在1994年10月13日,马克·安德森宣布Mozilla的第一个beta版本已经可以测试,在新版浏览器中将以标签为中心,并且标签将被简化。

在网景新浏览器发布的前三天,Hakon公布了CSS的第一份草案。Dave Raggett(HTML3.0的主要缔造者)鼓励在即将举行的“Mosaic and the Web”大会之前公布此草案,Dave已意识到HTML不能也不应该只是页面描述语言,更多的内建机制应该要满足开发者的需求。尽管文档第一版本不成熟,但它提供了讨论的有价值的基础。

对第一份CSS响应的人中有本书的另一位作者,伯特·波斯(Bert Bos)。那时他正致力于开发Argo浏览器,这个浏览器是把研究人文学科的学者们通过网络联系在一起的项目的一部分。它先于网景支持插件,通过插件可以高度定制样式表,Bos决定和 Hakon展开合作。虽说草案已发生重大变化,但不可否认的是它当初的理念。
Argo样式语言的一个功能是允许添加其他的标记语言到HTML中,这也成为CSS的设计目标,并且“HTML”被从规范中移除。Argo还有一些高级的功能并没有添加到CSS1中,例如属性选择器和文本生成,这两个特色寄希望于CSS2。

这时“样式表”并不是唯一的样式语言,还有Viola浏览器的Pei Wei的语言和早在1993年6月O’Reilly出版社的Robert Raisch写的另一种语言。除此之外,还有DSSSL,ISO领导下的一种复杂的样式和转换语言,它用来打印SGML格式的文档。DSSSL也能应用于HTML,但CSS区别其它语言一大功能是:它把Web上文档的样式不能有开发者或者用户修改考虑进去了,同时希望通过合并或者“层叠”的方式来做;事实上,不仅用户和开发者希望如此,而且这样对于显示设备和浏览器有着很好的兼容性。

最初的CSS提案计划于1994年11月在芝加哥举行的Web会议上提出。可在开发者日(Developer's Day)这份报告引起剧烈争论。首先,在用户和开发者之间平衡的概念上是新奇的,假设这样一个画面,一个滑块两端分别为用户和开发者,通过调节滑块,用户可以调节站在用户角度还是开发者角度的比例;其次,人们已经习惯使用简单的CSS去设计开发,不愿为了给文档添加样式去学习更为复杂的程序语言。CSS已经脱离了当初简单、直接的使用方式。

在1995年4月举行的WWW会议上,CSS再一次被提出。此次Bert和Hakon都在(实际上,这也是我们第一次见到他们),这次我们也能展示我们的实现。Bert对Argo的样式表寄予支持,Hakon展示了已经支持CSS的Arena浏览器版本。Dave Raggett实现的Arena是用来测试新想法,包括样式表。这场以技术展示开始的回忆在关于用户-开发者平衡的政治讨论中结束。支持开发者的认为开发者具有如何让展现文档的权利,例如一个争论是对警告标签必须打印要有规范要求,并且不能修改这些警告字体的大小。另一方这本书作者的支持者们认为用户必须要有如何展现的权利,当有冲突时必须要能表达他们看法的权利。

抛开派系之争,技术工作仍在继续。www-style邮件列表创建于1995年5月,这里的讨论内容经常影响着CSS草案的制作。三年后在此列表中已经超过了4000条信息。

1995年,W3C委员会~,很多公司积极加入,组织得以建立。各种各样的工作组~,W3C的成员和工作人员会晤和讨论未来技术的发展。因此决定成立另一个工作组:主要负责样式表。

1997年2月,CSS成立W3C旗下自己的工作小组,新的工作小组去解决CSS1中没有解决的问题。工作小组有Chris Lilley领导,他是来自曼彻斯特大学的爱尔兰人。CSS2在1998年5月成为推荐标准,CSS3并于1999年开始推进。此时,不只是HTML依赖于CSS呈现样式,很多基于XML的文件也需要CSS来进行呈现,浏览器于1998年开始对XML类型的数据提供支持,尽管存在限制。

W3C工作小组,官方名称为“Cascading Style Sheets and Formatting Properties Working Group”,工作不局限于CSS,有大约15个成员,被W3C的公司成员和组织成员委任。他们来自世界各地,通过电话进行每周一次大约一个小时的会议,每年举行四次聚会。最近几次分别在Provo、Redmond、San Francisco和Paris举办。在Paris举办时是在法国电力天然气的总部EDF-GDF召开,此次会议上,公司给小组提供了极好的晚餐:可以一边俯瞰巴黎和塞纳河,一边品尝美食,这是历史上为数不多的给辛苦的技术工作组最高的待遇之一。每个法国人可以因此而骄傲,虽然他们没有从天然气和电力提供者那里得到任何好处。

浏览器

IE VS Netscape

CSS的发展离不开浏览器的支持,如果没有浏览器,CSS只是学术界感兴趣的提案。第一个支持CSS的商业化浏览器是1996年8月发布的微软IE3。那时CSS1还没有成为W3C的推荐标准,HTML ERB(HTML编辑审查委员会)的任何讨论结果都将影响微软Chris Wilson领导的开发者,且讨论结果是不可预见的。最终发布的IE3稳定版支持大部分的颜色、背景、字体、文本属性,但不支持box模型。

下一个宣布支持的是网景的Navigator4.0。由于起初网景对样式表持怀疑态度,并且该公司的第一个实现版本是用来阻止微软宣传他们是比自己更加符合标准。网景这个版本中支持很多功能,例如浮动元素,但是Netscape的开发人员并没有时间对他们支持的功能做全面的测试,这也导致了很多CSS属性在Navigator4中不可用。

网景的实现方式将CSS转换为JavaScript的腻子脚本,和其他脚本一起运行。同时公司决定让开发者写JSSS程序,从而绕过CSS。如果JSSS成功了,在Web中将会多出一种不需要的样式表。幸运的是,这种情况没有发生。

同时,微软开始努力取代网景去争取浏览器市场占有率的宝座。在IE4中微软开始使用命名为“Trident”的渲染引擎,该引擎主要负责渲染CSS。Trident去除了IE3中的很多限制,但同时又引入了自己的一些限制和问题。IE4并不能完全的支持CSS1,Web标准项目组(WaSP)甚至在1998年11月由于公布了“IE的十大CSS问题”而大放异彩。

除了可以显示静态的文件,Trident也有能力动态的改变样式的属性。例如,元素可以通过不断修改top和left值从而呈现出动态效果,因此创造了“Dynamic HTML”。本质上,DHTML和JSSS类似,都是通过脚本设置样式属性,但DHTML从宣称是另一种样式语言。实际上,CSS是DHTML的一部分。

第三个支持CSS的是Opera。1998年,这个来自挪威的公司的浏览器因为小、可定制且支持微软和网景支持的大部分功能而闻名。1998年11月发布了Opera3.5,支持大部分的CSS1。Opera的开发者在发布之前已经进行了测试,由Eric Meyer在志愿者的帮助下开发的CSS1测试套件,对于测试的实现和提高产品的质量有重大意义。

此时此刻,网景和微软正在致力开发他们的下一个浏览器版本。网景已经决定在Navigator中使用新的渲染引擎“nglayout”,已经从头开始编写CSS的基础,他们新的浏览器命名为“Gecko”,并可从http://www.mozilla.org上下载beta版本。微软已经发布了IE5的预览版,一些CSS实现已经得到改进,希望WaSP的倡议可以提醒微软在CSS1完全被支持以前还有很多工作要做。

内容来自于1999年的图书《Cascading Style Sheets: Designing for the Web》

本文最后更新于2015-11-11 22:35:33