五、响应式布局

1、什么是响应式布局 Responsive Design

我们开发的页面在不同设备上都能良好展示,常用的设备:pc、平板、手机、ipod ...

2、meta便签中的viewport:

在PC端,一个页面的宽度(HTML的宽度)与浏览器的可视窗口宽度是一致的,且PC端的浏览器我们可以调节大小,手机端的浏览器和手机的宽度是保持一致的,且一般情况下不能调节大小。移动端HTML页面的宽度和浏览器(或者手机)的宽度没有必然的联系,一般HTML的宽度都是980/1024宽度
我们平时用手机浏览器访问一个pc端HTML页面,发现内容都缩小了:就是因为手机只有320宽度,但是页面的宽度确有980,这样如果把一个页面都要看全的话,只能缩小大概三倍左右

=>解决方案
HTML的宽度应该和手机保持一致,这样的话就不会缩小了,这样的话我们需要给HTML页面设置一个META标签:

<meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"/>
  • viewport:视口,设置当前浏览器按照多大的宽度来渲染页面(或者说让HTML页面有多宽)
  • width=device-width 设置一个HTML页面的总宽度和设备的宽度(手机的宽度)保持一致
  • user-scalable=no 禁止用户手动缩放
  • initial-scale=1.0 / maximum-scale=1.0 / minimum-scale=1.0:设置页面的初始(最大、最小)缩放比例都是1:1的(既不放大也不缩小)

以后只要是做移动端的产品(只要页面需要在手机上访问),这个meta 必须要加

layout viewport:布局视口(我们设定的就是它)
visual viewport
ideal viewport
详情见:http://www.cnblogs.com/2050/p/3877280.html


3、媒体查询@media

我们按照上述的原理,增加了viewport,页面内容不缩小了,但是出现了横向的滚动条,why?
=>原因
HTML的宽度:320(页面宽度320)
但是它里面文章article(内容)却有800的宽度,属于内容超出,所以出现了横向的滚动条
=>解决
article的宽度和html的宽度保持一致,不让内容超出页面,但是这样的设置需要在HTML的宽度小于800PX的时候在设置,大于800的时候(PC),我们写固定的样式值也没有问题(内容不会超出),这时就需要查询设备宽度() =>"媒体查询@media"

媒体设备:

all ->所有设备
screen ->所有屏幕设备(PC、PAD、PHONE...)
print ->打印机设备
...

媒体条件:

width:800px HTML的宽度为800PX
max-width:800px HTML的宽度小于等于800PX
min-width:320px HTML的宽度大于等于320PX
device-width:设备宽度
max-device-width
min-device-width
orientation:landscape(横屏) | portrait(竖屏)
-webkit-device-pixel-ratio:屏幕像素密度比

@media all and (max-width:800px) and (min-width:640px){
   符合该媒体查询条件的设备执行这里面的样式
   .article{}
}

@media screen and (orientation:landscape){

}

@media screen and (-webkit-device-pixel-ratio:2){

}

总结:
1、增加viewport
2、使用媒体查询,在指定的条件下调整样式
对于外层容器来说,不能设置具体的宽度了,需要使用百分比
其余的样式都是写具体的值,如果在某一个尺寸感觉不太方便阅读,我们在使用媒体查询细微调整即可
=>这种响应式布局方案就是“流式布局法(媒体查询法)” 核心:宽度不固定(百分比),其余都固定,不好在调整


4、项目中的移动端产品形态

->PC端和移动端用的是同一套产品:

1)流式布局
2)先按照PC端写,宽度可以写死,也可以写成百分比
3)在手机端使用@media在一点点的调整

->PC端和移动端用的是不同的产品,PC端一套,移动端是单独的一套:

1)PC端做的时候不需要考虑响应式(所有的尺寸按照设计稿写死即可)
2)移动端的项目需要做响应式适应不同的手机,但是不需要考虑PC了(有些公司会针对pad在出一套),可用rem布局或或流式布局
->流式布局:
->REM


5、移动端设计稿一般都是多大的?

640960 ->iphone4 (320480)
6401136 ->iphone5 (320568)
7501334 ->iphone6 (375667)

给我们的设计稿都是比真实的手机尺寸扩大二倍来做的(高度可以忽略不管,但是宽度必须是640或者750)

DPR适配:屏幕像素密度比
目前大部分手机的屏幕像素密度比都是2倍/3倍的在二倍或者更高倍数的屏幕像素密度比例下,我们肉眼看到的更加清晰
iphone3 :320480 分辨率 320480
iphone4 :320480 分辨率 640960


6、三种响应式布局

设计师给我们一个设计稿:640*960

  • ->流式布局法:
    1)宽度百分比自适应的
    2)其余的尺寸都按照设计稿中的尺寸的一半来写,假设:设计稿中 高度是100px,字体大小是36PX,边框是2PX 我们写的时候写:.box{ height:50px; font-size:18px; border:1px solid red; ... }

    问题:
    设计师设计的尺寸不应该出现奇数
    “一像素边框问题”:设计师设计的边框大小是1PX,我们布局的时候写.5PX,浏览器不支持半像素的,如何处理? => transform:scale(0.5)

  • ->等比缩放布局(已经被PASS了)
    我们布局的时候严格按照设计稿的尺寸来写,例如:设计稿中是 300*100 F:36 M:20我们写的时候

.box{
   width:300px;
   height:100px;
   font-size:36px;
   margin:20px;
   ...
}
JS:
var winW=document.documentElement.clientWidth;
var n=winW/640; //->0.5 或者其他的比例
document.body.style.transform='scale('+n+')';
  • ->REM(等比缩放思想的升级和目前最流行的响应式布局方式)

PX:固定单位,我们写多大的值,以后不管当前页面有多宽多高,它依然是这样的值;如果想要它改变的化,我们需要手动一个个的去调整

REM:相对单位,相对于当前页面根元素(HTML)字体大小设定的,例如:

  html{
     font-size:12px; //->1REM = 12PX  一个页面默认根元素字体大小16PX(谷歌)
  }

  .box{
     width:10rem; //->120PX
  }

以后只要我们改变HTML的font-size,所有以REM为单位的值都会跟着改


7、真实项目中如何使用REM做响应式布局开发:

设计稿:640*960
1、不管以后在什么样的手机上运行,我们只需要严格按照设计稿中标注的尺寸来开发即可
->设置HTML的font-size:100px =>1REM=100PX =>640的设计稿中是这样换算比例
->设计稿中的尺寸是多大,我们布局的时候就写多大,但是需要把所有量出来的PX都除以100变换成REM为单位的值

2、在JS中获取当前手机宽度,例如获取的是320PX
640 1rem->100PX
320 1rem->(320/640*100) px
根据屏幕和设计稿的比例,动态计算出最新的REM和PX的换算比例即可,重新设置HTML的font-size,这样就让所有以REM为单位的值都跟着改变了

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

推荐阅读更多精彩内容