02、CSS3-响应式布局

响应式布局原理
第一步:Meta标签
大多数移动浏览器将HTML页面放大为宽的视图(viewport)以符合屏幕分辨率。你可以使用视图的meta标签来进行重置。下面的视图标签告诉浏览器,使用设备的宽度作为视图宽度并禁止初始的缩放。在标签里加入这个meta标签。<meta name="viewport" content="width=device-width, initial-scale=1
user-scalable=no">

第二步:HTML结构
由于网页会根据屏幕宽度调整布局,所以不能使用绝对宽度的布局,也不能使用具有绝对宽度的元素,更多都是百分比操作,这一条非常重要。
字体也不能使用绝对大小(px),而只能使用相对大小(em)。

第三步:媒体查询-Media Queries
CSS3 Media Query-媒体查询是响应式设计的核心。它根据条件告诉浏览器如何为指定视图宽度渲染页面。
媒体查询的目的在于为指定的视图宽度指定不同的CSS规则,来实现不同的布局。媒体查询可以写在同一个或者单独的样式表中。

IE8或者更早的浏览器并不支持Media Query。你可以使用media-queries.js或者respond.js来为IE添加Media Query支持。

HTML中的条件注释:
<!--[if lt IE 9]>
 <script src="https://cdn.staticfile.org/livingston-css3-mediaqueries-js/1.0.0/css3-mediaqueries.min.js"></script>
 <![endif]-->

一、响应式布局

实现不同屏幕分辨率的终端上浏览网页的不同展示方式,通过响应式设计能使网站在手机和平板电脑上有更好的浏览阅读体验。

优点:
  面对不同分辨率设备灵活性强; 
  能够快捷解决多设备显示适应问题;
缺点:
  兼容各种设备工作量大,效率低下;
  代码累赘,会出现隐藏无用的元素,加载时间加长;
  其实这是一种折中性质的设计解决方案,多方面因素影响而达不到最佳效果;
  一定程度上改变了网站原有的布局结构,会出现用户混淆的情况;

如何实现响应式布局?
通过CSS3中的Media Query(媒体查询),对应不同屏幕大小,使用不同的样式操作;

二、viewport视口

  例如: 浏览器是相框,照片要放到相框中,照片比较大的时,照片就是进行缩放操作,但整体内容也缩放了;另外,照片要打印到相片纸中,再将其放入到相框中;
  PC端,要显示图片,是直接将图片渲染到浏览器窗口中;
  移动端,要显示图片,不是直接渲染到浏览器窗口中的,而是渲染在虚拟区域中即是viewpot;(移动端比PC端多了一层viewport,即可以通过设置viewport来控制整体页面的显示)
  • viewport的概念
    移动设备上的viewport就是设备的屏幕上能用来显示我们的网页的区域。用来显示网页的那部分区域,但viewport可能比浏览器的可视区域要大,也可能比浏览器的可视区域要小。默认情况下,移动设备上的viewport都是要大于浏览器可视区域的,默认的viewport设为980px或1024px(值由设备自己决定的)。浏览器可视区域的宽度是比这个默认的viewport的宽度要小,所以出现横向滚动条。

  • css中的1px并不等于设备的1px
    在css中我们一般px作为单位,在桌面浏览器中css的1个像素往往都是对应着电脑屏幕的1个物理像素。可能会造成我们的一个错觉,那就是css中的像素就是设备的物理像素。
    实际情况却并非如此,css中的像素只是一个抽象的单位,在不同的设备或不同的环境中,css中的1px所代表的设备物理像素是不同的。
    iphone3,它的分辨率为320x480,在iphone3上,一个css像素确实是等于一个屏幕物理像素的。移动设备的屏幕像素密度越来越高,从iphone4开始,苹果公司便推出了所谓的Retina屏,分辨率提高了一倍,变成640x960,但屏幕尺寸却没变化,这就意味着同样大小的屏幕上,像素却多了一倍,这时,一个css像素是等于两个物理像素的。
    还有一个因素也会引起css中px的变化,那就是用户缩放。例如,当用户把页面放大一倍,那么css中1px所代表的物理像素也会增加一倍;反之把页面缩小一倍,css中1px所代表的物理像素也会减少一倍。

  • 利用meta标签对viewport进行控制
    最常见的操作即是: <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">该meta标签的作用是让当前viewport的宽度等于设备的宽度,同时不允许用户手动缩放。
    meta viewport 标签首先是由苹果公司在其safari浏览器中引入的,目的就是解决移动设备的viewport问题。

  - width: 设置layout viewport  的宽度,为一个正整数,或字符串"width=device-width"(设备宽度)
  - initial-scale: 设置页面的初始缩放值,为一个数字,可以带小数
  - minimum-scale: 允许用户的最小缩放值,为一个数字,可以带小数
  - maximum-scale: 允许用户的最大缩放值,为一个数字,可以带小数
  - height: 设置layout viewport  的高度,这个属性对我们并不重要,很少使用
  - user-scalable: 否允许用户进行缩放,值为"no"或"yes", no 代表不允许,yes代表允许

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">

三、媒体查询

媒体查询可用于检测很多事情:

  - viewport(视窗) 的宽度与高度
  - 设备的宽度与高度
  - 朝向 (智能手机横屏,竖屏)
  - 分辨率
  • 媒体查询语法
 // 表达式根据条件是否成立返回 true 或 false
@media not|only mediatype and (expressions) {
    CSS-Code;
}

  - not: not是用来排除掉某些特定的设备的,比如 @media not print(非打印设备);
  - only: 用来定某种特别的媒体类型。对于支持Media Queries的移动设备来说,如果存在only关键字,移动设备的Web浏览器会忽略only关键字并直接根据后面的表达式应用样式文件。对于不支持Media Queries的设备但能够读取Media Type类型的Web浏览器,遇到only关键字时会忽略这个样式文件;
  - all: 所有设备,这个应该经常看到
  • 多媒体类型
  - all: 用于所有多媒体类型设备
  - print: 用于打印机
  - screen: 用于电脑屏幕,平板,智能手机等
  - speech: 用于屏幕阅读器
  • 根据屏幕不同,引入不同的样式表
  <!-- 屏幕在1000px以上的-->
  <link href="a.css" rel="stylesheet" media="screen and (min-width: 1000px)" />

  <!-- 屏幕是在600px~1000px-->
  <link href="b.css" rel="stylesheet" media="screen and (min-width: 400px) and (max-width: 1000px)" />

  <!-- 屏幕是在小于400px的-->
  <link href="c.css" rel="stylesheet" media="screen and (max-width: 400px)" />
  • 通过媒体查询,添加不同样式
  // 屏幕最小宽度是1000px
  @media screen and (min-width: 1000px) {
    div {
      width: 1000px;
      height: 50px;
      margin: 10px auto;
      color: white;
    }
  }

  // 屏幕最小宽度是400px,最大是1000px
@media screen and (min-width: 400px) and (max-width: 1000px){
    div {
      width: 50%;
      height: 50px;
      margin: 10px auto;
      color: white;
    }
  }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容