移动端布局(2) 常用布局方式

首先回顾一下上一篇文章的公式

dpr=物理像素(px)/逻辑像素(pt)

在充分理解这个公式的前提下,我们聊一下移动端布局的思路

布局出现显示不一致的根本原因在于存在一个物理像素和逻辑像素之间的转化问题,基于此我们很容易想到的第一个思路就是:

思路一:百分比布局

简单粗暴的将物理像素大小除以dpr转化为逻辑像素的大小

(如:设计稿为40px,布局的时候按20px计算)

遇到等分等布局的时候换算成百分比

缺点:在大屏幕的手机下显示效果会变成有些页面元素宽度被拉的很长,但是高度还是和原来一样,实际显示非常的不协调,这就是流式布局的最致命的缺点。通过大量的百分比布局,会经常出现许多兼容性的问题,因此对设计有非常多的限制,因为他们在设计之初就需要考虑流式布局对元素造成的影响,只能设计横向拉伸的元素布局,设计的时候存在很多局限性。所以这种方式我们基本不是用在移动端

既然流式布局存在元素之间比例变形的问题,那么我们将元素尺寸换算成rem后再进行布局,是否就能解决这个问题了呢?

思路二:rem布局

假如我们的设计稿是750px的设计稿,我们量出来一个盒子的宽度是75px,那么在 640px的屏幕下,它应该是多少合适呢? 答案是:64

那么如何才能保证你所写的css尺寸只需要写一次,就可以在不同的尺寸下不需要更改

假如我们在750px下面,我们让html的font-size为75,则这个盒子的宽度是1rem,在640px下面我们让html的font-size为64,则这个盒子的宽度也是1rem,问题就这样解决了,所以rem布局的核心是设置好根html元素的font-size。


1.png

缺点:这时候仍然存在一个问题,我在不同尺寸屏幕下的根字体大小是不一样的,也就是说我想完全利用rem进行布局,就需要对每个不同大小的屏幕设置不同的根字体大小,显而易见,rem与font-size强耦合关系导致这种方式不够灵活,。而且如果用js对font-size进行动态设置,可能在造成页面抖动的问题

思路三:vw布局

什么是vw,我们先看一下w3c的官方解释:

vw:1% of viewport’s width

其中viewport即浏览器可视区域大小,我们可以通俗的理解为100vw = window.innerwidth,所以在移动端我们一般都可以认为,100vw就是屏幕宽度。若使用vw布局,就不需要再像rem那样,在js中去动态设置根元素的font-size了,sass中只需要使用这个函数做转换即可

2.png

即:对应元素的vw=该元素在设计稿中的比例(该元素px/设计稿px)*100vw

3.png
4.png

这时候可能我们会产生一个疑惑,100vw和width:100%有什么区别呢?

百分比%是根据父元素宽度或者高度进行计算,而vw vh固定按照viewport来计算,不会受父元素宽高度影响。

100vw包括了页面滚动条宽度(页面滚动条属于viewport范围内,100vw当然包括了页面滚动条宽度)。但把body或者html设置为width:100%时,是不包括页面滚动条的宽度的。也就是说100vw在有纵向滚动条的情况下,会比100%宽。 从而通常我们不在pc端使用vw进行布局

缺点:比如当容器使用vw单位,margin采用px单位时,很容易造成整体宽度超过100vw,从而影响布局效果。对于类似这样的现象,我们通常将margin换成padding,并且配合box-sizing进行设置进行规避。

联想上面几种方法,rem方式布局的问题在于对于不同大小屏幕下根元素的重复设置,而vw正好可以解决这一问题,如果我们利用vw来定义根元素的大小,这样它就可以自动配适不同的屏幕了。再次基础上其余仍然使用rem进行布局,既保证了不同元素之间的比例问题,又可以规避vw布局需要多次计算的缺点

思路四(常用):

我们以640px的设计稿为例,由之前的知识积累我们很容易判断,640px的设计稿对应的是iphone5s,其逻辑像素是320px

320px==100vw 1px=0.3125vw 100px=31.25vm 1rem=100px=31.25vw

同理以720px的设计稿为例

1rem=120px=32vm

5.png

这种方式是目前比较完美的一种响应式布局方式,也比较常见,推荐使用

看了以上四种方法可能你已经对各种转换和概念搞得头昏脑胀,或者根本看不明白笔者在这里逼逼赖赖些什么东西。假设这种情况下你还能坚持看到这里————

恭喜你。忘掉之前的四个前任,准备好迎接新欢吧!

因为我们即将迎来一个傻瓜版的不需要自己计算的全自动适配现任,贴心又方便,满足你的一切需求,直接把银耳莲子羹煮好吹凉送到你到你嘴边,绝不嘴炮让你多喝热水(还得自己烧那种)

思路五:Flexible.js布局(完美现任)

Flexible.js是阿里团队开源的一个库,其本质还是rem混合vw进行布局,只是这个库可以自动帮你计算其中的一些转换关系,你只需要

1.删除html文件中的meta标签

2.将flexble.js中的代码贴到头部的script标签中

(或者直接加载阿里CDN的文件:

<script src="http://g.tbcdn.cn/mtb/lib-flexible/0.3.4/??flexible_css.js,flexible.js"></script>

3.把设计图中px转化为rem

(目前Flexible会将视觉稿分成**100份(主要为了以后能更好的兼容vh和vw),而每一份被称为一个单位a。同时1rem单位被认定为10a,这样一来,对于视觉稿上的元素尺寸换算,只需要原始的px值除以rem基准值即可)

什么?你觉得这样还不不够简单?这个现任还不够贴心?如果他真的爱你怎么会舍得让你喝东西的时候还需要张嘴呢? 说的很有道理

贴心的璐璐为你准备了CSSREM,一个CSS的px值转rem值的Sublime Text3自动完成插件,可以让你实现真正意义上的衣来伸手饭来张口,动脑计算rem?不存在的

11.png

真正实现代码自由,从此远离烦人的单位换算,开开心心做无脑人,你值得拥有

暖♥小贴士:文本适配的时候不建议使用rem哦~没看有人希望随着屏幕变小字体也随之变小吧,所以文字布局的时候建议还是使用px

补充:在看了一些第三方库的源码后笔者发现
为什么很多布局的第三方库都使用px作为单位而不是rem呢?

其实蛮简单的,因为rem会改变html的font-size,所有元素都受影响,我要是把我已有的项目引入一个mint-ui,那我是不是要改到吐血,所以三方库用px是必须滴

以上是关于布局的几种方式和思考,但是在以上几种方法进行布局的时候,都会遇到一个在移动端布局的经典问题——如何解决1PX线在视网膜屏幕中显示粗细不一,关于这个问题先留个悬念,笔者会在下一篇文章中进行详细讨论

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