Bert Bos是一位计算机科学家,他也是CSS的创始人之一。在CSS的发展过程中,Bos是最早与Håkon Wium Lie(CSS之父)合作的人之一。在1996年,他加入了World Wide Web Consortium(W3C)负责CSS的开发。他曾任CSS工作组的主席,现在是工作组的W3C代表。
在此之前,Bert在格罗宁根大学研究期间独立开发了Argo浏览器,这是为他的样式表提案而开发的测试应用。Argo浏览器可以处理其自带的SSP样式表语言,利用这种新浏览器语言,他创造了一种CSS标准。随后Lie和Bos合作,一起把CSS发展成为了W3C Recommendation。
采访:高博 | 整理:李盼
问:Bert先生,您曾多次来过中国。您感觉近来中国的Web开发者正在发生哪些变化?
我2008年的时候来过北京,我之前也去过香港和深圳。虽然中国起步较晚,但是现在越来越多的公司加入了W3C,其中有浏览器公司,也有搜索公司。虽然相比于美国、欧洲、澳大利亚来说中国开始得晚,但是现在来看中国的开发者已经和世界各地的开发者们没有什么区别了,他们做同样的修补、问类似的问题,拥有同样的布局困扰。
是的。从各家公司来看,虽然中国的开发者在起步时落后了一段时间,但是现在已经赶上了,技术上已经同步。
问:现在CSS已经变成了Web开发不可或缺的一部分,但是其实CSS的概念却并不是一开始就必然有的(已经有了HTML描述内容,有了JavaScript描述行为和交互),可以说它是从无到有地被人为发明出来的,您作为CSS的创始人之一,是否能告诉我们在早期发展阶段是如何产生需要一套样式表的想法?早期开发过程中又有什么样的故事?
Håkon Wium Lie和我发明了CSS,但是我们并没有发明样式表这个概念,这个概念很早以前就存在。我们发明的只是让网页开发更加简单的具体语言而已。但是,用样式表记录和构造内容的概念要比这个早得多。在一本书上,你想要什么样的字体,什么样的图画,多大的边缘,都是样式表要做的,这些概念已经存在了很久。而用计算机语言表述的电子化样式表也已经在上世纪80年代中期就出现了。
这么说吧,ML是在HTML之前出现的,HTML是在XML基础上构建的,而XML很早以前就有了样式表。我们研究了XML早期的样式表概念,也研究了当时仍然在发展中的样式表的概念,从中吸取了很多好的创意。另外,我们在一场大会上遇到了HTML的发明者,在那里我们听到了很多人对样式表的需求。虽然这些人我们以前从没打过交道,但是从他们身上,我们获得了很多关键想法。
可以说,对于我们,这并不是一个发明出来的概念,但是对于很多其他人来说,一切都是从HTML和CSS开始的。但是我知道,它们只是进化的一部分。
问:CSS的全称是cascading style sheet(层叠样式表),请问为什么是cascading(层叠),而不是其他的词,比如combining(组合)?
Håkon Wium Lie有一个主张,视图由两部分组成,一部分是提供者所认为人们应该看到的样子,一部分是接收者在屏幕上实际阅读的文档。从最开始,我们的设计理念就是:接收者也需要对视图的结果有影响。即在得到内容之后,你可以自己把它调成想要的样子。内容和样式从提供者那来,提供者可以规定具体的颜色和大小。但是接收者可以根据屏幕的特殊性,使用不同的字体或颜色。这就是我们的理念:多重影响、多重样式表整合在一起,这也就是层叠样式表概念的基础。层叠的意思就是一样东西叠加在另一样之上,层叠就像瀑布,互相叠加最终得出结果,这是一个比喻。
问:您的背景是数学专业,请问这样的背景在您创造CSS的时候是否有什么帮助和影响?
在计算机科学中我学习了语法,另外我还学习了一些人工智能,语法解析对我也有很大的帮助。在语言设计上,我们尽量做出容易阅读和解析的语法。所以说,计算机方面的学习对我的帮助比数学要多。
不是这样,Argo并不是为了测试样式表,而是为了让大学中非技术学院的师生(比如艺术学院,历史学院)可以自由上网,为了让他们能够在网上交换文件,阅读馆藏目录,收发邮件等等。所以我的目的是要创造一个非常好用的浏览器,它要支持HTML同时也要支持XML,因为在某些学院中XML的使用率更高。比如有人在研究《圣经》,他们需要比对不同版本的《圣经》,这些文件都是通过XML呈现的。他们也需要样式表,所以我的浏览器里就要有样式表语言。样式表中有一些有趣的概念,但是在当时他们并没有注意语法,并不是每个人都想写代码。Håkon Wium Lie这时候也发表了自己的想法,我觉得我们的想法可以结合起来。
问:作为CSS的创造者之一,您可能是回答这个问题的最好人选,CSS最根本的目的是什么?是什么目的可以跨越时间?这个目的将如何影响未来的开发?
有几个目标,它们随着时间也在进化。第一个最主要的原因就是要保护HTML。当时我们看到有一些公司,包括Mozilla,为了让呈现效果更好,开始在HTML上面加东西。我们认为内容和样式应该区别开来,因为在不同设备和屏幕上,你想看到不同样式但是相同的内容。为了保护HTML的稳定性,有很多人,不只是Håkon Wium Lie和我,也在尝试做相同的事情。我们知道我们需要另外一种语言来保护HTML,这就是我们创造CSS的直接原因。
另外一个理由就是,一旦你有一个专业的用来布局的语言,可以做的事就更多了。这些事如果只用HTML很难完成,而对于专门的语言则是小菜一碟。另外,如果你完成了一个样式之后,你可以反复利用,这样效率也更高。同时,因为这是专门处理样式表的语言,所以它也更紧凑。用HTML+CSS比单纯使用HTML代码更少,更简洁。 这些就是我们早期创造CSS的理由。但是随着时间推移,其他的理由浮出水面。比如团队编写文挡,一些人可以专门写文档,另一些可以专注于样式。这就是传统出版的概念,书就是这样出版的。有人写书,但是他们并不负责排版,这个概念很传统,在Web上也同样适用。
晚些时候又有一些概念出现了,比如说执行效率。从某个时刻开始,我们可以实现动画了,你可以用其他语言比如JavaScript或者插件来完成动画,但是我们注意到,采用CSS做这件事更容易。CSS是陈述式的,所以你不需要写专门的程序就能实现。你可以陈述从一个对象的动作哪里开始,到哪里结束,中间采用什么路径。如果用JavaScript的话需要执行循环,电脑可能无法预测该如何执行。但是你用CSS在浏览器中执行的话,它们就能看到事情是如何进展的,应该在哪里结束。所以你就可以做优化,可以预测动画。这也让动画变得更有效率,在屏幕上的效果也更好。执行效率也是CSS将在HTML上完成更多应用的最重要的原因。
问:如今PC上的流量已经被移动端所侵蚀,您认为CSS将如何助力这场Web应用和本地应用之战?
我不认为这是一场战争,两者都有生存的空间。但是我们确实想要Web平台变得和本地平台一样强大。因为Web应用一旦写成可以在任何地方任何设备上运行,效率更高也更便宜。所以我们确实希望Web平台能完成本地平台那些功能。CSS也一直在努力寻找边界:什么是属于CSS的,什么是属于SVG的,其中有一些很难界定。但是我们认为CSS还有更大的空间,我们想要在CSS里做的更多。因为人们发现就算他们在SVG里面做某些事比在CSS中更容易,但是还有很多工作他们愿意使用SVG和CSS并行开发。我也和JavaScript API的工作组一起工作,JavaScript是对接GPS、动作感应这些功能的接口,这些设计也连接了不同设备的API接口。
很多时候我们也会根据人们和设备的交互而改变样式,所以我们认为可以有更多东西出现在CSS中。经常会有人提议CSS里应该有什么,但是我们觉得有些东西应该在其他地方完成比较好。所以我们需要具体分析,人们的需求是什么,而我们能提供的是什么。
问:可以看出CSS是一个好的答案,但并不是所有问题的答案。很多人对预处理器这个话题很感兴趣,他们对于使用这些预处理器有一些顾虑,对此您有什么观点?
我很惊讶预处理器出现得这么晚,我还以为Sass,LESS会出现得更早一些呢。因为CSS是一种简单的基于文本的语言,写预处理器并不难。人们确实也利用预处理器完成了更加专业的设计,但并不是每个人都需要预处理器,你必须首先是个程序员才能使用它。但是如果你是个程序员的话,那么Sass这样的工具就对你就很有帮助。 工具的出现对于我们工作组来说也是一件好事,预处理器减轻了CSS的压力。我们可以专注于功能,字体,以及布局,不需要再考虑诸如变量之类的程序员喜欢的功能了,因为这件事已经在预处理器中完成了。另外,人们还可以选择他们喜欢的预处理器,如果我们在CSS中预置了预处理器的话,那就只有一种方式。但是现在大家可以选择,Sass,LESS,甚至你可以选择使用PHP。我认为预处理器是对于专业设计师来说是非常重要的。
变量对于程序员来说很重要,如果你要写大量样式表的话,所有这些都可以在Sass和LESS中完成。我并不认为W3C工作组应该来定义来如何完成工作,我们只负责创造核心语言,属性和值,而其他人可以来决定该如何写CSS。但是现在我们有变量了,加入变量的原因就是我们发现可以通过自定义属性和值让CSS变得更加常规。在自定义属性方面,我们利用CSS自己的机制cascading(层叠),这意味着你可以把变量附加在元素上,这样你不仅可以附加样式属性,还可以在文件上附加任意属性。对于应用来说这很方便,比如你有文件和结构,你需要把某些东西发展为高等级元素,你可以用CSS来附加这些值,你可以在HTML中这样做,但是用CSS更简单。这就是我们现在有自定义属性和值的原因。
如果你想用变量的话,那就用Sass就可以了。但是越来越多的人会开始使用自定义属性,自定义属性在未来有很多可能性,还有很多值得期待的有趣的功能可能会出现。
有两种模块化。在工作组中,我们分头制定更细化的规格,这是模块化的一种。我们这么做的原因在于这么一来规格的制定过程更简化,也可以在更小的规模上测试。但这和CSS中的模块化结构几乎没有什么关系,在这种意义下,我们并不是在模块化CSS而是在模块化我们的内部流程。因为我们不可能在同一时间做所有的事,我们需要聚焦在某个属性上,然后再研究下一个。
另外一种模块化是人们写样式表的方式,你可以写很多样式表,然后把它们融合起来,多重输入可以帮你把自己工作变成自己的样式表。
甚至还有第三种意义,虽然还没有开始,但是在工作组中已经开始讨论。我们开始讨论让其他制订人在CSS中加入特性,我们需要有另一种方式来模块化CSS,所以我们需要某种语法,JavaScript或其他语言的接口,让人们可以在CSS中加入特性,同时也符合CSS语法。你可以用自己的样式表,也可以插入扩展。虽然这件事还不存在,但是已经在讨论中了。虽然目前有两种模块形式,但是未来有可能模块化会有第三种意义。
要预言未来很难。现在XSL在出版行业的应用仍然很广,人们出版书籍使用的依然是XSL。但是正如我说过的,我们现在已经不再开发XSL了,因为找不到足够的人来组成工作组。虽然我们也希望能有新版本的XSL(现在仍然是版本1),但是我们目前没有计划开发下一个版本。也许我们很快能组件一个工作组,也许我们永远都不会,这些事都说不准。
现在我们的精力都集中在CSS上,人们希望能用CSS完成XSL能够完成的工作。XSL的功能都是为了出版而设计,生成索引、目录等等。我们未来会实现这些功能,但是并没有明确的日期。
除此之外,我们还有一大堆的事儿要做。在我们停止XSL工作组之前,已经有了一些为XSL版本2提交的需求,这些都是使用者向工作组提出希望XSL能实现的功能。这些需求仍然存在,我们可能会在CSS中一并实现这些功能,但是这就是再下一步的事儿了。
问:CSS已经快20岁了,您从一开始就参与了开发工作,这么多年下来回头看看,哪些功能是您最喜欢的?哪些是您最不喜欢的?
我最喜欢CSS的一点就是,几乎所有人都能写CSS。任何人都可以找一些例子,在网上看看其他人是怎么做的,然后就可以写自己的样式表了。这一点现在反而不那么强烈了,因为语言越来越大,样式表变得越来越复杂。但是我仍然认为要写CSS并不难。你不需要是一位专业人士就可以写一些Web文件,一些HTML,再来一点CSS。但是当然,为了完成更高级更完善的展示,我们也需要专业人士。相对来说XSL就不具备这样的品质,XSL是为专业人士而设计的。
最不满意的……可能就是我们没能做好的功能,比如定位。这个功能让你可以在CSS中把一个元素通过横纵坐标放到屏幕上特定的一点上。在1996年CSS最开始的时候,我们就想要做这个功能。当时的一个文档解释了我们将如何布局、修改屏幕,以及如何写在任何位置。我们把其称为frame,这比HTML的frame出现时间还要早。我们现在把这个概念称为regions,浏览器和工作组的概念都是同样的,但是96年对于这个概念来说太早了。那个时候的浏览器无法完成今天所能完成的工作。当时HTML只有两岁,记录的只是一个序列,从第一个字母开始到最后一个字母结束。所以 “在屏幕上制造一个事件”这样的概念过于先进了。但是另一个概念应运而生,就是额外帧,它从一个非常小的概念出发逐渐发展成一个非常灵活的概念,这也就是现在flex box出现的原因。这是我们现在尽最大努力能做到的了。
问:除了W3C工作组之外的时间您是否还做一些其他的项目?您是否考虑过自己写一个框架?
我是想过要写一个框架,但是从来都没有时间来做这件事。除了W3C工作组之外,我还有一个MathML工作组,但是工作基本已经结束了,我们已经完成了MathML第3版,暂时还没有创建下一个版本的计划。
其余的时间我自己也在做一些项目,但是和CSS完全无关,是关于网络安全的。在欧洲,欧盟会对相关研究予以补贴,每个人都可以申报研究项目,但是项目必须以合作形式完成,个人和单独机构都无法申请。W3C和比利时鲁汶大学、都柏林大学、SAP德国公司联手一起申请了网络安全方面的研究。我们的研究涵盖了很多广为人知的网络问题,但是也包含了一些鲜为人知的问题,这是个很有趣的项目。很多研究工作在大学中进行,而执行工作在公司中进行,两边的工作需要互相协调,标准化的工作在W3C以及其他一些机构中进行。这个项目占据了我很多时间,但是我从中学到了很多。
问:非常感谢您抽出宝贵时间接受采访,希望您下次来中国时带来更多精彩内容。
Bert Bos(右二)与采访者高博(右一)、李盼(左一)