CSS 历史回顾

Avatar of Jay Hoffmann
Jay Hoffmann 发表

DigitalOcean 为您旅程的每个阶段提供云产品。立即开始使用 200 美元的免费额度!

当您想到 HTML 和 CSS 时,您可能会将其想象为一个打包产品。但在蒂姆·伯纳斯-李于 1989 年首次创建万维网后的几年里,根本没有 CSS 这样的东西。最初的网络计划根本没有提供任何方式来设置网站的样式。

在 WWW 邮件列表的档案中,隐藏着一个如今臭名昭著的帖子。它由马克·安德森于 1994 年撰写,他后来共同创建了 Mosaic 和 Netscape 浏览器。在帖子中,安德森评论说,由于无法使用 HTML 设置网站的样式,因此当被问及视觉设计时,他只能告诉 Web 开发人员“抱歉,你被坑了。

10 年后,CSS 正在走向一个新兴的充满热情的 Web 社区的全面采用。*那么在此期间发生了什么?*

寻找样式语言

关于 Web 如何在理论上进行布局,有很多想法。但是,对于伯纳斯-李来说,这并不是优先事项,因为他在 CERN 的雇主主要对 Web 作为员工的数字目录感兴趣。相反,我们从社区中的开发人员那里获得了一些用于网页布局的相互竞争的语言,最著名的是来自魏培元、安德森和哈肯·维姆·利。

以魏培元为例,他于 1991 年创建了图形化 ViolaWWW 浏览器。他将自己的样式表语言直接整合到他的浏览器中,最终目标是将这种语言变成 Web 的官方标准。它从未真正实现,但它确实为其他潜在规范提供了一些急需的灵感。

ViolaWWW 发布时

与此同时,安德森在他的浏览器 Netscape Navigator 中采用了不同的方法。他没有创建一种专门用于网站样式的解耦语言,而是简单地扩展了 HTML 以包含表示性的、非标准化的 HTML 标签,这些标签可用于设计网页。不幸的是,不久之后,网页失去了所有语义值,看起来像这样

<MULTICOL COLS="3" GUTTER="25">
  <P><FONT SIZE="4" COLOR="RED">This would be some font broken up into columns</FONT></P>
</MULTICOL>

程序员很快意识到这种方法不会持续很长时间。有很多替代方案的想法。例如 RRP,一种偏爱缩写和简洁性的样式表语言,或者 PSL96,一种实际上允许使用函数和条件语句的语言。如果您对这些语言的外观感兴趣,Zach Bloom 撰写了一篇关于几种竞争提案的精彩深入研究

但吸引所有人注意力的想法是由哈肯·维姆·利于 1994 年 10 月首次提出的。它被称为层叠样式表,或简称 CSS。

我们为什么使用 CSS

CSS 脱颖而出,因为它很简单,尤其是与它的一些最早的竞争对手相比。

window.margin.left = 2cm
font.family = times
h1.font.size = 24pt 30%

CSS 是一种声明式编程语言。当我们编写 CSS 时,我们不会告诉浏览器如何精确地呈现页面。相反,我们描述HTML 文档的规则,一条一条地描述,并让浏览器处理渲染。请记住,Web 主要由业余程序员和有抱负的爱好者构建。CSS 遵循了一种可预测的,也许更重要的是,宽容的格式,几乎任何人都可以掌握它。这是一个特性,而不是错误。

但是,CSS 在某种程度上是独一无二的。它允许样式级联。它就在名称中。层叠样式表。级联意味着样式可以继承并覆盖先前声明的其他样式,遵循一个相当复杂的称为特异性的层次结构。然而,突破在于它允许在同一页面上使用多个样式表。

看到上面那个百分比值了吗?这实际上是一段非常重要的内容。Lie 认为用户和设计师都将在单独的样式表中定义样式。然后,浏览器可以充当两者之间的调解者,协商差异以呈现页面。该百分比表示此样式表为属性承担了多少所有权。所有权越低,越有可能被用户覆盖。当 Lie 首次演示 CSS 时,他甚至展示了一个滑块,允许他切换浏览器中用户定义和开发者定义的样式。

这实际上是 CSS 早期的一个非常大的争论。有些人认为开发人员应该拥有完全的控制权。另一些人认为用户应该拥有控制权。最后,百分比被删除,取而代之的是关于哪些 CSS 定义将覆盖其他定义的更明确的规则。无论如何,这就是我们拥有特异性的原因。

在 Lie 发布他的原始提案后不久,他找到了 Bert Bos 作为合作伙伴。Bos 创建了 Argo 浏览器,并且在此过程中,他自己的样式表语言,其中的一些部分最终被整合到 CSS 中。两人开始制定更详细的规范,最终求助于新创建的 W3C HTML 工作组寻求帮助。

这花了几年的时间,但到 1996 年底,上面的例子发生了变化。

html {
  margin-left: 2cm;
  font-family: "Times", serif;
}

h1 {
  font-size: 24px;
}

CSS 诞生了。

浏览器的问题

虽然 CSS 当时还只是一个草案,但 Netscape 已经开始使用表示性 HTML 元素,如multicollayer和令人讨厌的blink标签。另一方面,Internet Explorer 已经开始零散地整合一些 CSS。但他们的支持参差不齐,有时甚至不正确。这意味着在 CSS 作为正式建议发布五年后的 21 世纪初,仍然没有浏览器完全支持 CSS。

源于一个奇怪的地方。

当 Tantek Çelik 于 1997 年加入 Internet Explorer for Macintosh 时,他的团队非常小。一年后,他被任命为渲染引擎的首席开发人员,同时他的团队规模减半。微软的大部分重点(出于显而易见的原因)都放在 Windows 版的 Internet Explorer 上,Macintosh 团队基本上被置之不理。所以从 2000 年开始开发版本 5 时,Çelik 和他的团队决定将重点放在其他人没有关注的地方:CSS 支持。

该团队花了 2 年时间才完成版本 5。在此期间,Çelik 经常与 W3C 成员和使用其浏览器的 Web 设计师进行沟通。随着每一部分到位,IE for Mac 团队在各个方面都进行了验证,以确保他们万无一失。最后,在 2002 年 3 月,他们发布了 Internet Explorer 5 for Macintosh。第一个完全支持 CSS 级别 1 的浏览器。

文档类型切换

但请记住,Windows 版的 Internet Explorer 已将 CSS 添加到其浏览器中,其中包含不少错误和一个古怪的盒子模型,该模型描述了元素如何计算和呈现。Internet Explorer 将边框和填充等属性包含在元素的总宽度和高度。但 IE5 for Mac 和正式的 CSS 规范要求将这些值添加到宽度和高度中。如果您曾经使用过box-sizing,您就会确切地知道其中的区别。

Çelik 知道,为了使 CSS 正常工作,这些差异需要得到协调。他的解决方案来自与标准倡导者 Todd Fahrner 的一次谈话。它称为文档类型切换,其工作原理如下。

我们都知道文档类型。它们位于 HTML 文档的最顶部。

<!DOCTYPE html>

但在过去,它们看起来像这样

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

这是一个符合标准的文档类型的示例。//W3C//DTD HTML 4.0//EN 是关键部分。当 Web 设计师将其添加到他们的页面时,浏览器将知道以“标准模式”呈现页面,并且 CSS 将与规范匹配。如果文档类型缺失或使用了过时的文档类型,浏览器将切换到“怪异模式”,并根据旧的盒子模型和保留的旧错误进行渲染。一些设计师甚至故意选择将他们的网站置于怪异模式,以便恢复旧的(且不正确的)盒子模型。

埃里克·迈耶,有时被称为 CSS 之父,公开表示文档类型切换拯救了 CSS。他可能说得对。如果没有这个简单的小技巧,我们仍然会使用包含旧 CSS 错误的浏览器。

盒子模型黑客

还有一件事需要解决。在旧网站的现代浏览器中,文档类型切换工作得很好,但在旧版浏览器(尤其是 Internet Explorer)中,新网站的盒模型仍然不可靠。于是出现了 盒模型 Hack,这是 Çelik 想出的一个巧妙技巧,它利用了一个鲜为人知的 CSS 属性 voice-family 来欺骗浏览器,并在同一个类中允许多个宽度和高度。Çelik 指导作者先放置旧盒模型宽度,然后使用 voice-family 在一个小 Hack 中关闭标签,最后放置新盒模型宽度。有点像这样

div.content { 
  width: 400px; 
  voice-family: ""}""; 
  voice-family: inherit;
  width: 300px;
}

旧版浏览器不识别 Voice-family,但它确实接受字符串作为其定义。因此,通过添加额外的 },旧版浏览器会在到达第二个宽度之前简单地关闭 CSS 规则。它简单有效,让许多设计师能够快速开始尝试新的标准。

基于标准的设计先驱

Internet Explorer 6 于 2001 年发布。它最终会成为所有 Web 开发人员的一大难题,但它实际上附带了一些非常令人印象深刻的 CSS 和标准支持。更不用说它的市场份额徘徊在 80% 左右。

舞台已经搭建好,部件已经到位。CSS 已准备好投入生产。现在人们只需要使用它。

在 Web 在没有连贯或标准的样式语言的情况下飞速发展走向普及的 10 年里,设计师们并不是完全停止了设计。一点也不。相反,他们依靠浏览器 Hack、基于表格的布局和嵌入式 Flash 文件的积压来在 HTML 无能为力时添加一些样式。符合标准的、基于 CSS 的设计是一个新的领域。Web 需要一些先驱来开辟一条前进的道路。

他们得到的仅仅是几个月内两个重大的重新设计。第一个来自Wired,紧随其后的是ESPN

Douglas Bowman 负责Wired杂志的 Web 设计团队。2002 年,Bowman 和他的团队环顾四周,发现没有主要的网站在其设计中使用 CSS。Bowman 几乎有一种义务感,希望向一个以Wired为最佳实践典范的 Web 社区展示如何使用最新的、符合标准的 HTML 和 CSS 重新设计他们的网站。他推动他的团队拆除所有内容并从头开始重新设计。2002 年 9 月,他们成功完成了这项工作并启动了重新设计后的网站。该网站甚至可以 验证

ESPN 几个月后发布了他们的网站,在更大的规模上使用了许多相同的技术。这些网站对 CSS 做出了重大赌注,一些人认为这项技术可能根本无法持续下去。但它获得了巨大的回报。如果你能与参与这些重新设计的开发者中的任何一位交谈,他们会给你列出一系列重大的好处。更高的性能、更快的设计更改、更容易共享,最重要的是,对 Web 有利。Wired 最初甚至每天都更改颜色。

深入研究这些重新设计的代码,你一定会发现一些 Hack。Web 仍然只存在于几种不同的显示器尺寸上,因此你可能会注意到这两个网站都使用了固定宽度列以及相对和绝对定位的组合,将网格放入适当的位置。图像被用在了文本的位置。但是这些网站为接下来将要发生的事情奠定了基础。

CSS Zen Garden 和语义 Web

次年,即 2003 年,Jeffrey Zeldman 出版了他的著作Designing with Web Standards,该书成为希望转向基于标准的设计的 Web 设计师的指南。它开启了 CSS 技术和技巧的传统,帮助 Web 设计师想象 CSS 的功能。一年后,Dave Shea 推出了 CSS Zen Garden,鼓励设计师采用基本的 HTML 页面并仅使用 CSS 以不同的方式对其进行布局。该网站成为最新技巧和窍门的展示窗口,并在很大程度上说服人们是时候采用标准了。

慢慢地但肯定地,势头越来越强劲。CSS 发展并添加了新的属性。浏览器实际上竞相实施最新的标准,设计师和开发人员也为其技能库添加了新的技巧。最终,CSS 成为常态。就像它一直都在那里一样。

喜欢学习 Web 历史吗?Jay Hoffmann 有一份名为 The History of the Web 的每周时事通讯,你可以 在这里注册