Web 是普遍存在的,也是无处不在的,Web可以适应任何尺寸的屏幕以及任何使用环境,因为Web有其固有的灵活性和可塑性。

Web 再也不是某一平台独有的矿藏,而是真正成为了一张名副其实的大网,并将各种设备彼此连接在一起。

而作为开发人员要想不被这愈发迅猛的设备大潮所吞噬,就必须抛弃之前的一切,转而学会适应它、尊重它。

流动布局

随着越来越多设备的涌现,人们越来越难以继续忽略Web所固有的灵活性和不可预测性。

而作为拥抱灵活性的第一步,就是要为我们的站点创建流动布局,并藉此来对不同尺寸的设备屏幕做出不同的相应。

布局选项

  固定布局:在固定布局中,页面宽度会被指定为特定大小的像素,其中960px是使用最为广泛的宽度。

  流动布局:在流动布局中,度量的单文不再是像素,而是变成了百分比,这样可使页面具有可变的特性。

  弹性布局:弹性布局与流动布局类似,只是通常情况下弹性布局会以em来作为单位(1em=16px)。

  混合布局:最后一种选择就是混合布局,它结合了上面提到的两种或两种以上的布局方式。

那么到底哪种方式才是最具响应性的呢?从根本上来说,这取决于你特定的项目。不过,在大多数情况下,流动布局、弹性布局...相比固定布局更能适应变化

字体大小

  像素:由于不同的设备有着不同的像素密度,所以使用像素作为字体大小的单位,是与web的灵活性原则背道而驰的做法。

  em:em可以跨浏览器进行缩放,而且它也是级联的。级联意味着你只需要调整初始化时的基准,其余部分就会自动地进行调整,而且是按比例调整的。

  百分比:和以em为单位的字体一样,以百分比为单位的字体也是可缩放的,而且也是级联的。

  rem:rem与em的区别在于,rem的大小与根元素(HTML)有关。使用rem能够避免发生在嵌套元素中的级联问题。

使用em作为字体的单位是一种更加流行、更具灵活性的方法。使用em不但可以使文字能够缩放,而且维护起来也更加容易。

网格布局

网格有助于实现站点的平衡、间距以及组织结构。一个实现良好的网格系统会使你的站点井井有条,同时还可以提高页面的可读性和可浏览性

使用网格要做的第一件事就是确定画布。你得先把画布划分出若干你需要的列,然后才能继续后面的工作。

让你的内容来决定你的站点结构是一种很好的设计方法,而且这样做也是非常实用的。从一开始就让网格配合内容,这会让每个页面的设计都更具粘性

box-sizing: border-box 可以让浏览器将 padding 的值算在已经定义好的元素宽度内部。通过这一属性,能够使得设计流动布局变得更加容易。

媒介查询

流动布局是个伟大的开端,它消除了固定布局中的种种限制,并使站点能在不同分辨率的屏幕上都能漂亮地展示,但是它也只能带你走这么远。

媒介查询可以让你根据在特定环境下查询到的各种属性值(比如屏幕分辨率)来决定应用什么样的样式。通过使用媒介查询,就可以根据屏幕尺寸对页面做出相应调整了。

视口标签和属性

视口就是浏览器的可视区域,也指浏览器的宽度。

视口标签的形式非常简单,只需指定使用的视口元标签,然后列出一些声明即可:

  1. <meta name="viewport" content="width=device-width" />

该元标签需要放在 HTML 文件的 head 标签中:

  1. <head>
  2. <meta charset="UTF-8">
  3. <meta name="viewport" content="width=device-width" />
  4. <title></title>
  5. </head>

  width:width 声明可以让你将视口设置为某一特定的宽度,或者设置为设备屏幕的宽度。在 width 声明中使用 device-width 是最佳的选择。

  height:与 width 对应的就是 height,height 允许你指定一个特定的高度。事实上 height 并不常用,除非你不想让页面垂直滚动。

  user-scalable:user-scalable 声明会告诉浏览器,是否允许用户在页面上进行缩放。在那些追求完美到像素的设计中,常常将user-scalable属性设置为no。

  initial-scale:通过给 initial-scale 赋值为 0.1(10%) 到 10.0(1000%)之间的某个数,来设置页面初始化的缩放层级。

  maximum-scale:maximum-scale 声明可以告诉浏览器允许用户放大页面到什么程度。如果将 maximum-scale 设置为1.0,同样可以禁止用户缩放页面。

  minxmum-scale:minimum-scale 声明会告知浏览器允许用户将页面缩小到什么程度,其默认值是0.25(25%)。

媒介查询结构

媒介查询可以通过询问浏览器来确定特定的表达式是否为真。如果为真,那么就加载一些特殊的、适用于这种情况的样式,从而达到调整布局的目的。

媒介查询的一般形式为:

  1. @media [not|only] type [and] (expr) {
  2. rule
  3. }
  4.  
  5. type:媒介类型,特定的目标设备类型
  6. expr:媒介表达式,测试某一特性是否为真
  7. only:逻辑关键词,例如 andornotonly
  8. rule:规则,调整显示效果的基本样式

css中定义了10种不同的媒介类型,每一种媒介类型都会告诉浏览器是否要加载特定的样式表。但在实际的使用过程中,你会发现你几乎只会用到 screen(彩色计算机屏幕)。

样式表中的媒介查询语句如下:

  1. <style>
  2. @media screen {
  3. h1 {
  4. font-size: 1.2rem;
  5. }
  6. }
  7. </style>

此外,你也可以采用外部样式文件的形式,并在link元素内指定媒介属性:

  1. <link rel="stylesheet" href="screen.css" media="screen" />

就媒介类型本身而言,它只允许你指定设备的类型,但是为了对页面进行进一步细分,你需要缩小设备的范围,这时就该媒介表达式登场了。

媒介表达式

媒介查询的强大之处在于它们能够利用表达式来检测出设备不同特性的真假值。

例如通过下面这条简单的声明,你就可以判断出设备视口的宽度是否大于320px:

  1. @media screen and (min-width:320px) {
  2. /* css rule */
  3. }

这条语句首先会检测访问页面的设备是否属于 screen,然后测试设备的视口宽度,其中 min- 前缀会保证视口宽度至少为320px。

常用的媒介特性有 width(设备显示区域的宽度)、height(设备显示区域的高度)、orientation(指定设备处于竖直或水平状态)、resolution(设备的分辨率dpi)。

逻辑关键字

除了媒介类型和媒介表达式外,你还可以通过使用可选的关键字,来使媒介查询语句具有更强大的功能。

  AND:你可以使用 and 来测试多个表达式。 @media screen and (color)

  NOT:对整个表达式的结果取反,而不是对部分表达式的结果取反。 @media not screen and (color)

  OR:使用逗号在一系列表达式中的某一个为真时,加载某些样式表。 @media screen and (color), print and (color)

  ONLY:对于部分老式浏览器,使用only关键字可以隐藏媒介查询。 @media only screen and (color)

规则

媒介查询中的最后一块内容,就是你要应用的实际样式规则。

你可以在这里写基本的CSS规则,它们唯一的特殊之处就是位于媒介查询里面:

  1. @media only screen and (min-width: 800px) and (max-width:1000px) {
  2. body {
  3. font-size: 1.2rem;
  4. font-family: arial;
  5. }
  6. }

内嵌样式与外部样式

媒介查询既可以写在页面内部,也可以通过 link 元素的 media 属性被包含到页面中来。

  1. <style>
  2. @media only screen and (min-width:1200px) {
  3. a {
  4. text-decoration: underline;
  5. }
  6. }
  7. </style>
  8.  
  9. <link href="style.css" media="only screen and (min-width:1200px)" />

无论内嵌样式或外部样式是否会用到,所有的样式都会被下载下来。

外部媒介查询的优势在于文件可以变得很小,进而利于维护。缺点是额外的HTTP请求会使站点变慢。

响应式设计对性能的影响

响应式设计能够解决很多问题,但同时它也很容易在诸如性能、维护这些问题中迷失方向。在这些问题中,性能问题显得尤为重要。

因为在你构建用户体验中,性能是其中一个不可或缺的标准组件,而且很多案例研究表明,性能影响着你的用户的满意度,性能也是你最重要的一道防线。

虽然每个网站的情况都不相同,但有几点原因几乎是所有加载过慢的网站所共有的:

  下载并隐藏:display:none 虽然可以隐藏页面内容,但是被隐藏的资源依旧会被下载,浏览器仍然需要遍历所有资源,DOM元素也依旧会被创建。

  下载并缩小:响应式设计中使用的高质量图片,远远超过小屏幕设备的显示能力,这样一来,那些多余的字节就这样被白白浪费掉了。

  额外的DOM:尽管有些内容会被隐藏,但浏览器还是会解析并处理隐藏部分的DOM。而且复杂的DOM会导致更高的内存消耗、昂贵的回流以及运行的更慢的网站。

这些问题都不容易解决,因为它们是由现有的响应式设计和浏览器的工作模式所共同决定的。

总而言之,响应式设计是一种强劲的、向前思考的技术,但同时它对性能也有着显著的影响。要确信你已经明白了这些挑战,并且要在设计的过程中避免它们。

响应式 Web 设计指南「基础篇」的更多相关文章

  1. 响应式 Web 设计指南「实践篇」

    无论你是奔赴战场.跑马拉松,还是构建一个响应式的站点,准备工作都是关键. 创建一个响应式的站点意味着要考虑多样化的设备生态系统. 如果没有适当的准备,你将发现自己会因为缺少必要的部分而忙里忙外,并且站 ...

  2. <HTML5和CSS3响应式WEB设计指南>译者序

    "不是我不明白,这世界变化快."崔健的这首歌使用在互联网领域最合适不过.只短短数年的功夫,互联网的浪潮还没过去,移动互联网的时代已经来临.人们已经习惯将越来越多的时间花在各种移动设 ...

  3. Web开发——HTML基础(HTML响应式Web设计 Bootstrap)

    参考: 参考:http://www.bootcss.com/ 目录: 1.什么是响应式 Web 设计? 2.创建自己的响应设计 3.使用 Bootstrap 1.什么是响应式 Web 设计? RWD ...

  4. HTML5、CSS3与响应式Web设计入门(2)

    HTML5的宽泛含义开拓了Web开发的视野,增加了开发方案的多样性,同时也带给很多Web开发者不小的困惑,就是HTML5在涉及到Web某个应用领 域的开发时,到底代表了什么?本篇文章的目的就在于跟大伙 ...

  5. 什么是响应式Web设计?怎样进行?

    http://beforweb.com/node/6/page/0/3 开始第一篇.老规矩,先无聊的谈论天气一类的话题.十一长假,天气也终于开始有些秋天的味道,坐在屋里甚至觉得需要热咖啡.话说两年前也 ...

  6. 十大响应式Web设计框架

    http://www.csdn.net/article/2014-05-13/2819739-responsive-frameworks-for-web-design 对于设计师而言,网站设计中的任意 ...

  7. 分享29个超赞的响应式Web设计

    原文自:http://www.csdn.net/article/2013-01-16/2813678-responsive-design-websites 最近几年,响应式Web设计不断印入人们眼帘, ...

  8. 学习之响应式Web设计---一个实例

    周末闲来无事,做了一个响应式设计的例子.当然,由此并不能窥见响应式设计真谛之一斑.但,对于初次接触响应设计,对于响应式设计的概念依旧模糊不清的同学来说,或许是个启蒙! 闲语暂且不表,进入正题,这里没有 ...

  9. HTML5、CSS3与响应式Web设计入门(1)

    HTML5与CSS3已经当仁不让的成为了这两年Web界最火爆的词,他们似乎在HTML4和CSS2统治了Web很多年之后的某一天突然爆发,然 后一直占据着所有Web开发者的视野.HTML5本身就是一个很 ...

随机推荐

  1. C++编程命名规则

    原文地址:http://www.cnblogs.com/ggjucheng/archive/2011/12/15/2289291.html 如果想要有效的管理一个稍微复杂一点的体系,针对其中事物的一套 ...

  2. plsql developer导入导出序列方法

    导出: 1.打开PLSQL Developer,工具 2.类型排序,选中所有sequence,指定用户,单个文件,选择导出文件路径,等待执行完毕即可. 导入: 打开导出的文件,复制,在新打开的命令窗口 ...

  3. Ex3_15 判断图是否是一个强连通分量 判断点是否在汇点强连通分量中_十一次作业

    (a) 可以用图中的每一个顶点表示街道中的每个十字路口,由于街道都是单行的,所以图是有向图,若从一个十字路口都有一条合法的路线到另一个十字路口,则图是一个强连通图.即要验证的是图是否是一个强连通图. ...

  4. MVC,MVP设计模式

    什么是MVP MVP是模型(Model).视图(View).主持人(Presenter)的缩写,分别代表项目中3个不同的模块. 模型(Model):负责处理数据的加载或者存储,比如从网络或本地数据库获 ...

  5. 输入年月日判断是当年第几天(if判断)

  6. CGAffineTransform 缩放 / 旋转 / 平移

    CGAffineTransform此类是一个3*3矩阵的变换. - (void)transformImageView { CGAffineTransform t = CGAffineTransform ...

  7. Linux mount 修改文件系统的读写属性

    有时候要在某个文件夹下添加和删除文件时,显示 "read only filesystem",说明该文件系统是只读的不能修改.使用 mount –o remount,rw / 命令可 ...

  8. Chrome浏览器JSON格式化插件

    经常我们使用浏览器调试某个接口,返回的结果看起来很乱如下 我们使用JSON-handle来进行格式化 安装 插件下载地址 插件下载后,在浏览器输入:chrome://extensions/ 将下载后的 ...

  9. 基于 OSGi 的面向服务的组件编程,helloworld

    基于 OSGi 的面向服务的组件编程 OSGi(Open Services Gateway Initiative,开放服务网关协议)提供了一个面向服务组件的编程模型,基于 OSGi 编程,具有模块化, ...

  10. LINQ学习之旅 (四)

    LINQ to SQL语句之Group By/Having和Exists/In/Any/All/Contains 1.Group By/Having操作符 适用场景:分组数据,为我们查找数据缩小范围. ...