响应式互联网设计【A List Apart杂志第306期】

标签: 响应式 互联网 设计 | 发表时间:2012-07-12 10:56 | 作者:Aitch Ren
出处:http://www.yeeyan.org

译者 Aitch Ren

2010年5月25日

伊森·马考特(Ethan Marcotte)


“在印刷媒体中设计师拥有一种熟悉的掌控感,从而常常渴望在互联网上也能同样地掌控全局。然而这种掌控其实只是实体印刷页面本身固有的一种局限而已。互联网恰恰没有这种局限,所以我们因该拥抱它给设计带来的自由天地。但首先,正如老子所说,万物作而弗始,生而弗有——我们应该先接受事物生灭的规律。”

——约翰·阿尔索普(John Allsopp)《互联网设计之道》( A Dao of Web Design)

英国建筑师克里斯托弗·列恩(Christopher Wren)曾打趣地说他所选择的建筑业“意在永恒”——多么引人入胜!我们的互联网业则常让人感觉“意在下周”。建筑的定义很大程度上取决于它的永久性。基础决定平面,平面决定构架,构架又塑造立面,建筑设计流程的每一个进阶都有着越来越强的不可变性。创作上的每一个决定都造就着一个实实在在的空间,规划着人们如何地在这空间的范围内活动,年复一年,世纪更迭。

相比之下,互联网的设计则全然不同。我们工作的定义取决于互联网的短暂性,常常在一两年内就需要细化更改或取代。当我们发表作品时,需要和太多无形的变量进行协商——视窗的尺寸、屏幕的分辨率、用户的个人定义、系统的自带字体,这些仅仅是其中的几个例子。而多年来,我们已经非常娴熟地适应了这个过程。

然而这一切也正在改变,改变的速度也许比我们愿意接受的要快。移动终端浏览量可望在 三年五年内超过固定终端。三大主导游戏设备中有两个已经自带了浏览器(而且 其中一个非常优秀)。我们正在为鼠标键盘、T9智能输入、手持游戏机、触摸屏等形形色色的终端进行互联网设计。总之,我们所面对的电子设备、输入法则和浏览软件的数量已经是史无前例的了。

这几年,我的客户中越来越多的公司要求在他们的项目中加上一个独立的“iPhone网站”。这个提法很有趣,表面上它肯定了移动WebKit作为浏览器引擎的高质量,并且反映了对固定电脑终端的超越是个强大的商业趋势;但作为一名设计师,我感到是我们需要检讨自己为何经常依赖这样的要求来帮助我们把要解决的问题划分为小块。我们常用 子域名来把移动终端对网站的要求与那个“非移动网站”划分开来。但下一步呢?再加一个“iPad网站”?再加一个“诺基亚N90”网站?我们真的可以继续为每一个新的用户终端定量身定做吗?这个游戏开始越来越象一场没有建设性的零和博弈。我们和我们的设计到底应该如何应对?

以弹性为基础

我们来看一看这个 设计范例吧。我建立了一个假想的杂志网页,一个以 流动性网格为基础的简单双栏布局,加上若干 弹性图片分布在页面中。我一直倡导非固定式布局,认为这种布局因其不确定性而更能经受未来的考验。弹性设计不对浏览器的宽度作任何假设,因而能优雅地适应不论是水平式的还是竖直式的终端设备。

图1
图1:大尺寸的图片会以超大尺寸显示。我们的这个设计布局尽管是弹性的,但对于分辨率和视区(Viewport)尺寸的变化不能很好地响应。

然而,无论是固定式还是非固定式布局,没有一种设计能够超越其原本所意图的媒介环境而天衣无缝地进行伸缩。这个 范例在较大的浏览器窗口改变尺寸的时候能完全伸缩自如,但当分辨率降低时压力马上就出现了。在小于800x600的分辨率之下,左上角题标背后的插画边缘很快被裁去,导航部分的文字的分行变得很不雅观,而右下侧的图片则缩小到难以辨认的地步。而同样受到影响的不仅仅是低分辨率的一端,在宽屏显示器中图片则很快变成笨重的超大尺寸,令周围的文字内容不堪排挤。

总之,我们的弹性设计在以普通电脑显示屏为出发点的环境下能够游刃有余,但超出这个范围之外优化程度就很低了。

向响应式发展

近来一种叫“响应式建筑”的新兴专业正开始探讨实体空间应该如何对身处其间的人进行响应的问题。建筑师们结合嵌入式机器人技术和可拉伸的材料,对 艺术装置墙体结构进行实验,使其在人群接近的时候能够弯曲、伸缩或扩张。同时将气候控制系统与运动感应器结合还能够根据空间所容纳的人数多少来调节室温和环境光。某些公司已研制了“ 智能玻璃技术”,这种玻璃能够在室内人数达到一定密度的时候变为不透明以增加私密性。

迈克尔·福克斯(Michael Fox)和迈尔斯·坎普(Miles Kemp)在《交互建筑》(Interactive Architecture)一书中把这种适应性较强的方法描述为“一种多次循环的系统,这个系统就是一次对话,一次持续而建设性的信息交流。”我理解的重点在“持续而建设性的信息交流”上,因为这里有一个微妙而又强有力的区别:与其为特定的空间体验而创建不可变的空间,他们的建议是人和建筑能够并且应该相互进行影响。

这就是我们的出路。与其为越来越多不同的互联网设备量身定做一个个相互割裂的设计, 我们应该把这些设计需要当作同一个体验的不同层面来处理。我们的设计可以针对一个理想的视觉体验,而同时嵌入各种基于互联网标准的技术使其更有弹性,更能适应不同媒介的呈现。简言之,我们应该推行响应式互联网设计。然而,应该如何开始呢?

引入媒介查询(media query)

自从CSS 2.1开始,我们的样式表逐渐从媒介类别( media types)中取得了一些终端设备的意识。如果你写过 打印样式表,那你已经熟悉这个概念了:


<link rel="stylesheet" type="text/css" href="core.css"
  media="screen" />
<link rel="stylesheet" type="text/css" href="print.css"
  media="print" />


为了能使设计的适用范围不仅局限于格式整齐的打印件,CSS的规范中包括了相当多的 可适用媒介类别, 分别为各种特定的互联网终端设备所设计。然而大多数浏览器和设备并没有真正地支持规范中的实质精神,致使许多媒介类别 没有得到完善的实施,有的甚至完全被忽视。

值得庆幸的是W3C在CSS3的规范中创建了媒介查询( media queries),用以在媒介类别的基础上加以改善。媒介查询使我们不仅能针对某些特定的设备类型,还能够对呈现设计的设备的物理特性进行检验。比方说近来随着移动WebKit的普及,媒体查询就已成为一项很常用技巧,用以向iPhone、安卓及其他类似的移动系统提供定制的样式表。具体方法是在链接样式表的媒介属性中加上这样一个查询:


<link rel="stylesheet" type="text/css"
  media="screen and (max-device-width: 480px)"
  href="shetland.css" />


这个查询中包含两个部分:

  1. 媒介类别——屏幕(screen),以及
  2. 括号中的查询内容,包括具体需要检验的媒介特性——最大设备宽度(max-device-width),以及紧跟其后的目标数值(480px)。

查询以简明的英语表明我们需要检验设备水平方向的最大分辨率(max-device-width)是否480px。如果检验通过——也就是说,如果设计确实是呈现在类似iPhone的小屏幕上——那么设备则载入指定的样式表shetland.css。否则,这个链接则被忽略。

设计师们以往也试验过具有分辨率意识的布局,不过那些试验大多依赖于JavaScript驱动的方法,比如卡梅伦·亚当斯(Cameron Adams)的 绝妙程序。然而媒介查询则明确地提供了 一系列媒介属性,不仅止于屏幕分辨率而已,从而大大地扩展了查询的可能范围。并且,你还可以用一次查询同时检验多项属性的数值,用关键词and把多个查询内容连接在一起:


<link rel="stylesheet" type="text/css"
  media="screen and (max-device-width: 480px) and (resolution: 163dpi)"
  href="shetland.css" />


除此之外,我们不仅能够把媒介查询放置在链接(link)之中,还可以用@media法则在CSS样式表内进行媒介查询:


@media screen and (max-device-width: 480px) {
  .column {
    float: none;
  }
}


或者作为@import输入指令的一部分:


@import url("shetland.css") screen and (max-device-width: 480px);


以上的每一个例子,效果其实都是一样的:一旦设备通过媒介查询的检验,相关的CSS样式表即施加到源码上。媒介查询简言之就是我们设计师的条件注释( conditional comments)。不同的是我们并非针对某个浏览器的某个版本,而是随着设计布局逐渐超越其初始的理想分辨率,对产生的问题进行有意识的矫正罢了。

改变、响应和征服

来看看我们最初的设计的页面中的那些基本图片吧。在默认状态的布局下,相关的CSS是这样的:

.figure {
  float: left;
  margin: 0 3.317535545023696682% 1.5em 0;   /* 21px / 633px */
  width: 31.121642969984202211%;             /* 197px / 633px */
}

li#f-mycroft,
li#f-winter {
  margin-right: 0;
}

在这里我省略了一些字体上的定义而把焦点集中在布局上:每一个.figure类别的图片元素都定义在包含其在内的栏宽的三分之一左右,最右边的两个图片(li#f-mycroft和li#f-winter)的右侧外边距(margin)定为零。这个设置只要在视区(viewport)的大小与初始设计目标比较没有太大改变的情况下都能呈现得比较好。有了媒介查询,我们就可以作与分辨率相关的局部调整,使设计方案能更好地适应显示设备的变化。

首先,我们把视区在某一分辨率界限值(比如说600px)以下的页面作线性调整。所以在样式表的下方我们加上一段@media定义,如下:

@media screen and (max-width: 600px) {
  .mast,
  .intro,
  .main,
  .footer {
    float: none;
    width: auto;
  }
}

如果你在一个标准的现代台式电脑浏览器内打开我们 更新了的设计页面,将视窗缩小到600px以下,媒介查询会取消页面主要元素的悬浮属性,并将其依照文件顺序竖向堆叠起来。这样,我们的设计的小型版就成型了,只是其中的图片仍旧不能智能地伸缩。如果我们引进另一个媒介查询,便能够做出相应的改变了:

@media screen and (max-width: 400px) {
  .figure,
  li#f-mycroft {
    margin-right: 3.317535545023696682%;    /* 21px / 633px */
    width: 48.341232227488151658%;          /* 306px / 633px */
  }

  li#f-watson,
  li#f-moriarty {
    margin-right: 0;
  }
}

图2
图2:我们的人像图片能够响应性地改变布局以更好地 适应小屏幕的呈现

不用介意这里毫无规则的百分数,我们只是修改了早先的弹性网格以适应新的线性布局。总之,这里我们在视区宽度小于400px的情况下 把三栏式的布局变为双栏式,从而使图片显得更为突出。

事实上,我们也可以用同样的方法来处理宽屏的情况。在高分辨率下可以采用 六个一排的方式排列所有的图片:

@media screen and (min-width: 1300px) {
  .figure,
  li#f-mycroft {
    margin-right: 3.317535545023696682%;    /* 21px / 633px */
    width: 13.902053712480252764%;          /* 88px / 633px */
  }
}

这样我们的图片在分辨率的 高端和低端都能够优雅地呈现,从而能随着视窗宽度和设备分辨率的改变优化页面布局。

图3
图3: 通过新的媒介查询定义一个较宽的最小宽度值,我们成功地将图片调整成 横排式布局

然而,这仅仅是个开端。利用嵌入CSS的媒介查询,可以改变的远远不止几个图片的位置,我们可以为每个分辨率区间选择性地引入 不同的布局设计,可以在宽屏模式下让导航部分更为突出,或者在小型屏幕中将导航移到题标之上。

图4
图4:通过响应式设计,我们不仅能够在小型设备中线形化地组织内容,还能够在 一系列不同的显示设备上将设计做到最优化。

其实响应式设计并不仅限于改变布局。通过媒介查询我们能够相当精确地对页面进行重构:包括在小屏幕上扩大链接的目标区,从而更好地遵循触摸屏的费茨定律( Fitts' Law);包括对某些元素有选择性地显示或隐藏,从而改善页面的导航功能;还包括设置 响应式排字法,渐进地改变字体大小和行距,从而为显示设备提供最优化的阅读体验。

技术上的几点注释

应当指出的是标准的现代浏览器对媒介查询的支持度是相对高的。台式电脑浏览器中例如Safari 3以上、Chrome、Firefox 3.5以上,以及Opera 7以上都自带媒介查询解析,近年的移动浏览器中Opera和WebKit也一样。当然,那些台式机浏览器的旧版本就无法支持媒介查询了。而微软尽管承诺了要 在IE 9中支持媒介查询,但目前为止Internet Explore仍没有出台自带的媒介查询功能。

不过,对旧版浏览器的媒介查询支持有兴趣的,可以在JavaScript中找到一线希望:

  1. 2007年的 一个jQuery插件可以实现一些有限的媒介查询,只在单独链接中支持媒介属性里的最小宽度和最大宽度。
  2. 近期推出的 css3-mediaqueries.js代码库承诺了要为IE 5以上、Firefox 1以上以及Safari 2提供通过@media解析、测试和应用媒介查询的能力。尽管这一技术还比较稚嫩,但我个人认为它的功能颇为强大,有意关注它的进一步发展。

当然有的人不愿意使用Javascript,也很可以理解,这就反而证明了以 弹性网格为基础的布局的重要性了,因为在无视媒介查询的设备和浏览器中这样的设计才能保证享有一定的灵活性。

未来的路

流动网格、弹性图片和媒介查询是响应式互联网设计的三大技术成分,但是崭新的思路也是必不可少的。与其把同样的内容割裂成不同设备专属的体验,我们可以通过媒介查询,渐进增强式地将一个设计在不同的阅读环境中加以优化。这么说并不是要绝对否定在任何情况下使用针对特定设备的独立网站,比如当移动用户在你的网站上的商业目的相比固定电脑用户要单一得多的时候,为两种情况分别输送不同的内容可能是最好的方法。

然而我们也不需要固守在那样的设计思路里。如今越来越需要我们的设计能够呈现在一系列多种多样的体验之中。响应式设计为我们指出了一条未来的路,是我们终于可以依照万物生灭的规律来进行设计了。


A List Apart 杂志 及文章作者授权翻译。


关于作者

伊森·马考特 伊森·马考特,互联网设计师和开发者,深入关注完美的设计、优雅的代码,以及两者的相互关系。多年来伊森与包括圣丹斯电影节、斯坦福大学、纽约杂志和今日秀等客户合作愉快。他 在推特上嘻笑怒骂,希望长大了能够成为 势不可挡的机器忍者。他最近出版的著作是《 响应式互联网设计》。

相关 [响应式 互联网 设计] 推荐:

响应式互联网设计【A List Apart杂志第306期】

- - 译言-每日精品译文推荐
伊森·马考特(Ethan Marcotte). “在印刷媒体中设计师拥有一种熟悉的掌控感,从而常常渴望在互联网上也能同样地掌控全局. 然而这种掌控其实只是实体印刷页面本身固有的一种局限而已. 互联网恰恰没有这种局限,所以我们因该拥抱它给设计带来的自由天地. 但首先,正如老子所说,万物作而弗始,生而弗有——我们应该先接受事物生灭的规律.

移动互联网时代:响应式网页设计已成为大势所趋

- - 博客 - 伯乐在线
我们正处在移动互联网快速发展的时代,智能手机和平板也越来越普及,有些人甚至都到了没有智能手机或平板就无法过活的地步. 智能手机和平板的普及,也就意味着越来越多的用户会通过移动设备访问互联网. 通过移动设备访问互联网的用户或多或少都有过这样的经历:有些网站压根就没有针对移动设备的网站,哪怕是有,大多都是不够“移动友好”,阅读体验完全跟不上传统的 Web 版本;而且在不同的移动设备上,浏览体验也是大相径庭,让很多用户大为苦恼.

响应式网页设计

- - 前端观察
这个话题最近很火爆,我也一直在关注,响应式网页设计和移动互联网密切相关,并因移动终端的丰富和普及而兴盛,并且是一个颇具争议的话题,我今天将和大家探讨下. 上周写了个简单的ppt在组内大概介绍了下,感兴趣的话可以 先看下这个PPT. 在说到这个话题前,我们先看下网页设计和前端开发的现状:. 全球有超过53亿手机用户(包括传统手机).

响应式Web设计

- - 葵中剑's Blog - SwordAir.com
响应式Web设计( Responsive Web Design – RWD)一般是指那些使用CSS3 Media Query特性制作站点,其可以适应不同视窗尺寸的布局. 虽然很早就已经有了类似RWD的概念,但直到最近一年里才开始变得特别流行,各种文章、例子、工具、模板,不断地从无到有,诸如:. 响应式Web设计50个例子和最佳实践.

响应式网页设计

- - IT技术博客大学习
响应式网页设计最初是由 Ethan Marcotte 提出的一个概念:为什么一定要为每个用户群各自打造一套设计和开发方案. Web设计应该做到根据不同设备环境自动响应及调整. 当然响应式Web设计不仅仅是关于屏幕分辨率自适应以及自动缩放的图片等等,它更像是一种对于设计的全新思维模式;我们应当向下兼容、移动优先.

响应式Web设计

- - 阿里巴巴(中国站)用户体验设计部博客
在设计中经常遇到这几个问题:. 1.想要网站兼容手机、平板电脑、pc,就得为不同的设备定制不同的版本. 2.想要网站的某些页面在宽屏显示器下一行显示更多的内容,又得为宽屏定制一个版本. 3.很多人并不是在全屏的情况下浏览我们的页面,如果让页面随着浏览器宽度改变而相应的调整会不会比较好. 有没有办法能有效解决这些问题呢.

漫谈响应式设计

- - 新浪UED
学究一些,首先大家先了解一下响应,然后再讲一下设计,响应就是我发出的请求能得到什么样子的回复,比如我说“你好”,你会很容易的给我回复“你好”,因为大家都是中国人,如果我说“hello”,我们这代人如果上过初中,他也会给我说“Hello”,但是如果我给对你说“Bonjour”,那可能只有高配的人才可能知道了.

淘宝响应式WebUI设计实践

- - Taobao UED Team
感谢贷岩的邀请,我在本期奶茶会上做了“响应式设计实践”的分享,是接着上一次的话题进一步讨论“如何实现”. 响应式Web设计(Responsive Web design)是当下比较流行的话题,什么是响应式设计. 简单讲,页面的设计与开发应当根据用户行为以及设备环境(系统平台、屏幕尺寸、屏幕定向等)进行相应的响应和调整.

Screenqueri.es:响应式设计测试工具

- - 我爱水煮鱼
当你创建一个响应式的布局的时候,在绝大部分流行的分辨率的设备上进行测试是非常重要的,这可以让你决定页面上的每块是否现实或者优化它们的显示方式. 今天给大家介绍的 Screenqueri.es 就是一个免费的基于 Web 的响应式设计的测试工具,它能够让你输入一个网址,然后选择移动或者平板设备,然后对你的网站在各个分辨率下进行测试.

非响应式设计的viewport

- - 前端观察
整理自: Viewport Meta Tag For Non-Responsive Design. 中文原文: 非响应式设计的viewport. 请尊重版权,转载请注明来源,多谢~~. 大家已经非常熟悉 响应式网页设计了吧,但是我们通常会忽略很多旧的没有采用响应式设计的网站,其实这类网站在移动终端的用户体验更为关键——因为它们没有对移动设备做任何优化.