Skip to content

Web 布局技术演进:了解 Web 布局发展史

自 1989 年至今,Web 已经有 30 多年的历程了。30 多年来,Web 也发生了翻天覆地的变化,Web 开发工作也衍生出多种工作岗位,而我们作为 Web 前端开发者的其中一员,更应该感谢 Web 给我们带来的机遇和未来。从今天开始,我们来一起探讨 Web 开发中一小部分相关的技能(或者说知识),即 Web 布局

Web 布局演变过程

多年以来,Web 布局已经改变了互联网。 那么, Web 布局是从什么时候开始的,又是如何走到今天的呢? 我们将深入研究 Web 布局的历史和演变,看看几十年来 Web 布局最佳实践是如何变化的。

Web 布局的历史关键点的可以通过《Web Design History Timeline》来了解!

自1991 年 Berners-Lee 创建出世界上首个 Web 页面到如今天,Web 布局主要可以分为六个关键点:

img

正如上图所示,每个关键点都有新的布局技术出现,也正因如此,Web 布局也随着技术的变革变得越来越灵活,越来越强大。 其主要表现在,Web 布局的适配性更强、美感更强、用户体验更好等等。

除此之外,我们还可以换过一个角度来看。因为不同时代,Web布局(设计)有着自己不同的定义:

img

在 Web 布局(或者说 Web 设计)中,每个版本有着自己清晰的定义:

  • Web 设计 1.0(Web Design 1.0)是“一维的 ”:设计元素大多是按顺序排列的(按文档流的自然顺序排列) ;
  • Web 设计 2.0(Web Design 2.0)是“二维的 ”:单元格中有放置元素的网格,具有更多的自由性 ;
  • Web 设计 3.0(Web Design 3.0)是一个“新的维度 ”:它可以像平面设计工具一样,自由地定位元素、重叠,为网页设计开辟了新的前景,也将开启新的 Web 页面设计时代 。

注意,这里所说的“二维”布局仅是坐标轴上来描述的,它和后面要介绍的 CSS Grid 布局中提到的二维布局概念是不一样的!到目前为止, 只有 CSS Grid 布局才是二维布局!

刚才我们也提到过了,Web 布局的演进有六个关键点,这样划分是因为,在这个时候有新的 Web 布局技术出现,使用不同的布局技术,对 Web 布局也有着不同的称谓。

img

有了这个基础,接下来我们将围绕着 Web 布局这六个关键点来展开。和大家一起探讨每个关键点中采用的主流 Web 布局技术。

无任何布局模式

互联网上的第一个网站是由 Tim Berners-Lee 创建的,他在瑞士研究中心 CERN (欧洲核研究组织)设计了该网站

img

Tim Berners-Lee 不仅被誉为第一位 Web 设计师,他还创建了超文本标记语言 (HTML 规范),并使用该语言对 CERN 网站进行了编码。 他还编写了第一个 Web 服务器规范 (HTTP) 和 Web 浏览器。 他将继续创建万维网联盟,该联盟至今仍负责监督 Web 标准的开发。

Tim Berners-Lee 对漂亮的格式不太感兴趣。出于这个原因,HTML 的原始规范不包含任何真正能够准确控制页面布局的能力。

也就是说,在早期的 Web 设计时代,Web 页面上的信息(元素)通常按照正常的流顺序(出现在 HTML 文档的源顺序)来组织。 它没有色块、没有图像、没有图形,只有文字。与我们今天所认为的“网页设计”相去甚远。

这个阶段(大约1991年~1994年)没有任何 Web 技术可言,他仅仅依靠 HTML 文档的顺序来组织和展示 Web * 页面信息* !

在这个阶段只有 展示性的 HTML 标签单像素的 GIF 技巧

  1. 展示性的 HTML 标签

早期的 HTML 规范仅提供了 18 个 HTML 标签的描述:<title>, <nextid>, <a>, <isindex>, <plaintext>, <listing>, <p>, <h1><h6>, <address>, <hp1>, <hp2>, <dl>, <dt>, <dd>, <ul>, <li>,<menu><dir>

在这同一时间,主流浏览器制造商(Netscape 和 Microsoft)添加一些标签,允许 Web 开发人员使用一些具有“展示性”的 HTML 标签来控制页面外观,例如粗体的<b>和斜体的<i>。有些标签还允许更改字号<font size="+2">、设置字体<font face="verdana"> 以及文本颜色<font color="red">和背景颜色<body bgcolor="blue">。甚至某种程度的图像对齐也可以通过<img> 标签的属性来完成,例如<img src="logo.gif" align="center" />

只不过,这种方式很快成为 Web 开发人员维护页面的一个巨大问题,必须在站点的多个页面上的多个实例中进行更改。 此外,Web 的创始人,例如 Tim Berners-Lee,曾设想 HTML 仅用于定义文档的结构,而不是用于控制展示。

注意,<img>标签大约在 1995 年才进入 HTML 规范的!

  1. 单一像素的 GIF 技巧

虽然首个 Web 页面仅仅是文本和超链接的展示,但在第二年(1992年)开始,图片就可以通过<img>标签在 Web 页面中呈现。 下图是世界上首先被运用于 Web 页面的图片之一。

img

不过在当时,Web 开发者更喜欢使用单像素透明图片(GIF)来设置元素之间的间距。作为透明图像,该像素后面的任何内容,例如背景图像或颜色,都会显示出来。

单像素图像下载速度很快,因为它是不可见的(透明的),设计师可以通过添加间距属性(例如 <img src="smiley.gif" hspace="75" >widthheight)来简单地改变水平和(或)垂直间距,例如 <img src="single.gif" width="150" > 以创建所需的任意数量的空白空间。

表格布局模式

互联网的发展是快速的,仅仅几年之后,HTML 2.0 (大约在 1995 年)就新增了图片<img>)、表单<form>)和 **表格 ** (<table>)等标签。这为 Web 开发人员在页面组织方面提供了更多的创造性自由。

就在 HTML 2.0 表布之后的第二年(1996年),用于展示数据的表格就被用于 Web 的布局上,而且越来越受欢迎,也就在这个时候,**表格布局模式 ** 就随之开启了。

例如:

<table>
    <tr>
        <td colspan="2">顶栏</td>
    </tr>
    <tr>
        <td>左列</td>
        <td>右列</td>
    </tr>
</table>

效果如下:

img

早期的 Netscape 站点就是使用表格进行布局的:

img

直到如今,在互联网上依旧能看到使用表格布局的 Web 页面!

尽管表格(<table>)的设计初衷是用于数据展示,而不是为 Web 布局而设计的,但表格在 2000 年代成为 Web 布局的“首选”方案。虽然使用表格来对 Web 布局,可以让 Web 页面以一定的结构性来呈现页面信息,但对于 Web 开发人员来说依旧是痛苦的,而且对于页面的性能也是致命的。

虽然表格布局有着天生的不足,但它对于 Web 的设计和开发的演变有着革命性的影响,它将彻底改变 Web 设计的历史!即有 Web **布局 **这样的一个概念!

大约在使用表格进行布局的同时,HTML 框架标签(<frameset>)的使用也很流行。使用<frameset>标签,HTML 文档可以指定页面区域,使用<frame src>标签可以包含其他 HTML 文件(.html)。框架集甚至可以嵌套以获得更好的控制。

下面的示例显示了五个单独的页面如何包含在主<frameset>标记中。

<frameset cols="30%,*">
    <frameset rows="40%,*">
        <frame src="frame1.html">
        <frame src="frame2.html">
    </frameset>
    <frameset rows="33%,33%,*">
        <frame src="frame3.html">
        <frame src="frame4.html">
        <frame src="frame5.html">
    </frameset>
</frameset>

大致效果如下:

img

当然,这个系统意味着开发人员必须为一个布局管理多个 HTML 文件。由于其他原因,框架也存在问题。比如页面添加书签效果不佳、页面超链接会令人常感到困惑,而且它们对搜索引擎也不友好。

随着设计和开发工具变得越来越复杂,Web 用户开始对他们的在线体验寄予更多的期望。因此,苹果公司(Apple)在其计算机系统会议上创造了 “用户体验” 一词。

在 90 年代末期,浏览器大战中的大玩家(网景和微软)聚在一起对 HTML 发起了一场新的变革,即 逐步淘汰(弃用)展示性的 HTML标签 。同时, HTML 结构分离的级联样式表 概念随之到来,并且得到快速的推进。

1996 年,层叠样式表(CSS)面世,允许我们将 Web 页面的结构(HTML)和样式信息分开。样式规则可以保存在单独的文档(外部样式表,即.css文件)中,样式表(CSS)可以用来设置 HTML 标签元素的展示信息,比如颜色、布局和排版等。

HTML CSS 是一组强大的组合,也将 Web 设计和开发推入到新的一个时代

与此同时,Web 动画紧随其后,Macromedia Flash 1.0 席卷了互联网。

img

但它并非没有缺点。动画只有在网站配备了 Flash 扩展插件时才能运行,否则动画会显示为空白。这给完全基于 Flash 构建的网站带来了严重的问题。此外,Web 动画的开发需要繁重的工作,而且页面加载速度较慢。

CSS 的诞生,让 Web 逐渐告别表格布局模式,开始迎来新的布局模式

浮动、定位和框架布局模式

自 1996 年发布了第一个 CSS 建议 之后,1998 年就发布了 CSS 第二版本(CSS 2.0),该版本提供了新的 Web 布局特性,比如定位(position )。与此同时,随着 CSS 的到来,Web 页面才真正有了“美感”这么一说:

img

也是在这个时候(大约是 90 年代末、20 世纪初),表格布局开始用于其初衷(数据展示),随之在 Web 布局中涌现出很多新的布局模式。比如 浮动布局定位布局框架布局 等。

这里所说的框架布局是指 CSS Frameworks,而不是 HTML 中的框架标签!

  1. 浮动布局

浮动布局指的是使用 CSS 的浮动(float属性)特性来构建 Web 页面。它和 HTML 的表格(<table>)标签有点类似,它的初衷也不是用于 Web 布局的,是用来对 Web 进行排版的。即,用来处理文本围绕图片(或某个元素)的一种排版方式 ,就好比 Word 这样的排版软件中的排版方式,如下图所示:

img

只不过,广大的 CSSer 发挥其无穷的智慧,硬是将其用于 Web 的布局中,而且这种布局方式一度成为一种主流的布局方式,并且持续了很多年,甚至直到今天,还有不少的同学在使用浮动来布局。直到 Flexbox 布局的出现和移动端的兴起,浮动布局才慢慢的被其取替。

在 CSS 的布局模式当中,浮动布局经历的时期是最长的(至少到目前还没有什么方式超过它),持续了十多年的历史。在这个过程中,也积累了很多不同的布局方法。在早期,Web 开发人员主要采用 固定宽度流式布局 两种布局方案来实现 Web 页面的布局。

img

在这个时期也演变出很多经典的布局。其中要属“圣杯 ”和“双飞翼 ”两者最为经典。这两种方法实现的都是以三列布局为主,而且两边的宽度是固定的,中间列是自适应,它们实现的效果是一样的,只是实现的思路不同。

  1. 定位布局

随着 CSS 的定位(position)属性的出现,Web 布局除了浮动布局之外,又新增了 定位布局 。这种方式的布局能让你快速达到想要的布局效果。当然也有很多同学直接尝试采用 PSD2HTML 这样的工具,直接将设计图转换成 Web 页面。虽然这种方式能快速实现 Web 布局的效果,但也受到很多的局限性:

  • 需要明确指定元素的大小 ;
  • 需要明确计算元素位置坐标 ;
  • 难于维护 。

或许其中还有很多其他不利的因素。因此,这样的布局也不算是一种好的布局模式,但对于不太懂 CSS 的同学而言,这是一种简单易懂的布局。

早期使用 PSD2HTML 的工具或软件(比如 Photoshop 或者 Firework 制图软件的切处导出的页面),基本上采用的都是定位布局。如今也有很多类似的工具,比如一些 AI 智能还图的运用,从设计稿中导出来的 HTML 和 CSS,不全是采用的定位布局。

  1. 框架布局

这里所说的框架布局,指的是 CSS Frameworks(CSS 框架),比如 Bootstrap!

随着这么多年的发展,现在大量的 Web 设计都是基于网格布局。虽然人们通常注意不到它,但事实上杂乱无章的布局时代确实已经过去了,现在是整齐结构化的天下。无论从理论、美学和整齐来说,这样的布局都很好平衡。网格结构是所有现代网站的基础,它最终总能给用户完美无暇的设计。

对于网格系统,其也经历了一个漫长的演变。表格布局虽然痛苦,但可以说表格是网格系统布局的最初模型。

img

正因为有表格布局的存在,才有了后面的 CSS 网格系统,不管是早期基于浮动完成的网格系统,还是后期依赖于 Flexbox 完成的网格系统。当然,你可能会说,网格系统的鼻祖不是 960gs

img

虽然 960gs 是最早出现的网格系统(基于浮动布局),但其网格的思路是来源于表格的。因为表格具有明显的栅格风格,只不过是使用其它的布局方式,快速模拟了表格的风格,甚至是嵌套表格的风格。加上网格系统让 Web 的设计变得结构整齐、布局平衡等,受到众多设计师的青眯,也让 Web 开发者更易实现,并且可以依据此思路制定一套系统。基于此系统,可以快速完成 Web 布局,并且达到较好的效果,甚至还可以基于此系统制作工具,通过工具帮助大家快速完成布局。

网格框架中的网格系统,依旧是使用浮动或者后面出现的 Flexbox 构建的布局系统,它和原生的 CSS Grid 模块有着本质的区别!

响应式 Web 布局(RWD)

直到 20 年代初,Web 网站都是为桌面浏览器创建的。虽然在这个阶段,Web 开发者会采用不同的布局技术,比如流式布局(也常称**百分比布局 ** )让 Web 页面适配浏览器不同尺寸,但还未进入真正的 响应式 Web 设计 时代。

哪怕是 Cameron Adams(@themaninblue) 在他的博文《Resolution dependent layout》提出了* 基于屏幕分辨率来动态构建* Web 布局使用 JavaScript 根据浏览器窗口大小加载不同 CSS 文件 ),也称不上是响应式 Web 布局。

虽然这种依赖动态分辨率布局的方案,可以在不同的分辨率下提供更佳的体验,但随着 2005 年 08 月 10 日 Opera 软件公司推出 Opera Mini ,和 2007 年 01 月 09 日第一台 iPhone 手机的出现,市场上不同品牌,不同分辨率的移动端以及品牌商自己的 Web 浏览器越来越多。

img

在这种环境之下,基于动态分辨率加载不同的样式表已不太现实,Web 开发者不得不想出其他的方案来适应不同的屏幕尺寸。

在很长一段时间,甚至到今日,为了适应不同屏幕的尺寸适配,为移动端单独创建一个网站,即 移动子域名网站。比如 Facebook 的桌面版本和移动端版本,采用两个不同的域名来访问:

img

如此一来,开发人员要开发两个版本,相应的工作量就更大了,特别对于要快速响应和试错的 Web 应用来说,难度变得更大。

Web 开发人员为了能改善这种现象,在 2010 年的时候,Ethan Marcotte(@beep) 基于 John Allsopp(@johnallsopp) 的 《网页设计的道(A Dao of Web Design)》,提出响应式 Web 设计思路(《Responsive Web Design》)。从此响应式 Web **设计 ** (Responsive Web Design,简称 RWD )的身影就出现在了公众面前。

Ethan Marcotte(@beep) 在《Responsive Web Design》中提到:

响应式这个词源自于建筑学领域,原本指的是建筑物本身会“响应”实际的使用情况,来自我调整。在Web开发领域,“响应式”的意思就变成了,我们开发的 Web 页面会“响应”用户的设备尺寸而自动调整布局。在这篇文章中提到过,我们可以基于 流体网格(Fluid Grids)、灵活的图片(Flexible Images)和媒体查询(Media Queries) 三种技术来构建一个响应式 Web 网站或 Web 应用。

另外,Ethan Marcotte(@beep) 构建了第一个具有响应式的 Web 网页,可以说是响应式 Web 设计经典案例之一(只可惜现在打不开了):

img

内在 Web 设计(IWD)

内在的 Web 设计这个概念,是在 2018 年由 Jen Simmons 提出的,这个概念是 Web 设计中的一个新概念!她在 2018 年的 An Event Apart 大会上分享了该话题 (该话题的 PPT请点击这里获取),她分享时曾表示:

我们现在正处于 Web 设计发展的另一个转折点,创意比增长更重要。

img

Jen 说,“内在 Web 设计”("Intrinsic Web Design")可能是 Web 设计历史上的新关键点,一切都在改变,在以技术和经验为基础,希望以最少的代码量来实现复杂的 Web 设计,或者说,Web 开发者希望在用最少的代码和复杂 Web 设计之间取得完美的平衡 。她意识到,以“内在 Web 设计”将可以把这种平衡趋向于完美。那么什么是内在 Web 设计?

什么是内在 Web 设计?

自从 Web 诞生以来,Web 开发者一直在使用大量的技巧来完成所有与布局有关的事情。无论是使用浮动(float)还是引用外部第三方 CSS 框架(CSS Frameworks)和库(比如Bootstrap)将内容放置在 Web 页面上想要的任何位置(即布局),几乎都有一些 Hack 的身影存在!

浮动的初衷是用于排版的,只不过在那个年代,Web 开发者利用其特性来构建 Web 的布局,而且运用于 Web 布局很多年。其中大多数第三方的 CSS 框架和库都是采用浮动来完成 Web 的布局!

然而,像 Flexbox 和 Grid 这样的 CSS 模块的出现,使我们能够正确构建我们想要的 Web 布局(设计),而且没有任何 Hack 代码、第三方 CSS 框架或 JavaScript 脚本(指完成 Web 布局方面)。从本质上讲:

能够以最少的 Hack 和技巧构建任何你想要的 Web 布局(或设计)!

也就是说,与将设计人员和开发人员都限制在 Web 的“预定义规则”中不同,内在 Web 设计(Intrinsic Web Design)使他们能够灵活地将传统的、久经考验的 Web 布局技术和现代布局方法和工具(比如 Flexbox、Grid等)结合起来,以便根据 Web 的内在内容创造独特的布局。

鼓励设计人员和开发人员将内容放在首位,并允许他们利用所有可用的布局技术和方法,以最佳方式在 Web 页面上显示内容,同时保持代码干净和更高效。用最简单的术语来说:

内在 Web 设计(Intrinsic Web Design)不是内容以设计为导向(Content Design-Driven),而是只专注于让设计受内容驱动(Design Content-Driven)。

通俗地说,直到现在,大多数的 Web 设计和布局都是以设计为导向,因为在构建 Web 布局时,都是基于设计师提供的设计稿(模板)来完成。因此,你不难发现,现存于线上的很多 Web 页面上的元素大小(尺寸)基本上都设置了固定的尺寸,而且这些尺寸是根据最初设计师提供的稿子定义的。

事实上呢?Web 的数据是动态的,服务端吐出的数据与最初设计稿内容有可能并不匹配(有多,也有少),此时呈现给用户的 Web 页面并不是最佳的(有可能很多空白空间未利用,有可能内容溢出容器,打破布局)。反之,Web 的内在尺寸设计就不同,在 Web 布局时,页面元素大小是根据真实内容(服务端吐出的数据)来决定的。

内在 Web 设计是 Web 布局的新时代,* ***超越了响应式设计。我们正在使用** Web * 本身作为一种媒介(设计受内容驱动),而不是试图模拟印刷设计(内容以设计为导向)。内在* Web **设计更为重要的是,不仅上下文的流畅,适应性高,还能够在 ** Web 布局和当前的 CSS 功能集上发挥真正的创造力

组件驱动式 Web 设计(CDWD)

组件驱动式 Web 设计被称为下一代响应式 Web 设计!

Web 生态是不断向前发展的。在这十多年来,CSS 也发生了巨大的变化,新增了很多新的特性,近两年尤其如此。这些变化,对于响应式 Web 设计的开发也有较大的改变。就在2021 年 Google 的 I/O 大会上 ,Una Kravets(@Una)提出新的响应式:组件驱动式 Web 设计(Component-Driven Web Design ,即 CDWD )。

简单地说, 组件驱动 Web 设计(Component-Driven Web Design),基于组件驱动的开发,即 CSS **新增的特性将直接基于组件而不是基于页面注入样式响应能力 ** 。用下图来简单概述组件驱动式 Web 设计:

img

简要地说,我们使用 CSS 新特性可以做到:

  • 响应用户的需求;
  • 响应容器的需求;
  • 响应外形的需求。

而且我们不再仅限于基于媒体查询来构建页面级的布局,还可以基于容器查询构建组件组的布局。这对于以往的布局来说,是质的变化。

2022 年及以后 CSS 布局技术

自从第一张 Web 页面诞生至今,Web 的布局已经经过了多次迭代:无布局 » 表格布局 » 浮动布局 » 框架布局 » 现代布局 » 未来布局:

img

整个布局演变过程中,有不同的名词来定义布局(一般根据采用的布局技术来命名):

img

其中浮动布局(主要是 CSS 的 float 属性)技术曾也占据较长时间,在当初那个年代可以说是主流的布局技术,直到 Flexbox 的出现以及浏览器对 Flexbox 越来越完善时,浮动布局技术才被 Flexbox 布局技术替代下来。

虽然时下 Flexbox 布局技术是一个主流布局技术,但并不代表着 CSS 的浮动(float)就没有存在的必要了(有些布局效果还是离不开浮动的,比如不规则布局)。

随着 CSS 技术不断向前发展,尤其是这几年,可以用 Web 布局的特性明显增多:

img

正如上图所示,其中多列布局(Multi-column)和 Flexbox 已经是很成熟的技术,只不过多列布局(Multi-column)使用的较少,对于像 CSS 自定义属性、CSS 网格(它也很早就有了)、宽高比(aspect-ratio)、CSS 比较函数(min()max()clamp())、CSS 逻辑属性、CSS书写模式 和 CSS 视窗单位,是近两年才得到主流浏览器支持,其他很多特性对于 Web 开发者来说是“只闻其名,未见其身”。

换句话来说,时至今日,这些特性都可以用于 Web 布局当中,它们都是 Web 布局工具箱中的一员。在未来,我们还可以使用像子网格(subgrid)、容器查询 和 父选择器 :has() 等特性(这三个特性,已经得到部分主流浏览器的支持)。

如果你有关注过CSS相关的发展报告的话 ,你可能也知道,这几个 CSS 特性一直以来也是 CSSer 最为期待的三个特性,尤其是容器查询和父选择器:

img

也就是说,这些 CSS 特性已成为时下,或将成为 Web 布局的主流技术。

小结

历史是不断向前的,技术也是如此。虽然 CSS 在众多同学眼里是一件轻松的事情,但事实并非如此。正如此文所介绍的 CSS 实现 Web 布局,这就不是一件轻松的事情,很多工作两、三年的同学,都不一定能对 Web 布局实现达到手到擒来。

除此之外,在未来,Web 布局的模式将会越来越多,越来越强大,比如不久的将来,CSS Shapes 能帮助我们打破矩形的布局模式,CSS 的多列布局能让我们在 Web 中实现报纸排版的效果。或许还将会有其它的布局模式。

如果想彻底掌握上面提到这些布局模式,那么你需要对 CSS 有一定的基础了解。有了这些相关的基础,你会更好理解其中的一些概念和相关理论。如果你是初次接触 CSS,或者说对 CSS 了解还不足够深,那也无妨,因为我们接下来的内容将会带领大家一起来探讨现代 Web 布局技术。比如 Flexbox、Grid、容器查询等!

Contributors

作者:Long Mo
字数统计:7.1k 字
阅读时长:23 分钟
Long Mo
文章作者:Long Mo
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Longmo Docs