您的位置:首页 > 移动开发

手机端适配-rem布局

2017-08-01 19:50 267 查看

rem布局

当写到移动端页面的时候,用px单位跟媒体查询是很难做到适配所有机型的,所以我找到了rem布局;

rem: rem是根据html节点的fontSize来自动修改的,当html元素的fontSize是12px时,

那么久可以得出 1rem = 12px;

rem布局: 其实就是把需要自适应元素的px换成rem,因为rem是根据html自动修改的,所以我们

可以用js检测手机屏幕大小,再根据屏幕大小计算出html的fontSize值,从而使页面内的rem发生改变。

这是rem布局的核心代码,这段代码的大意是:

如果页面的宽度超过了640px,那么页面中html的font-size恒为100px,否则,

页面中html的font-size的大小为: 100 * (当前页面宽度 / 375)

(function (doc, win) {
var docEl = doc.documentElement,
resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
recalc = function () {
var clientWidth = docEl.clientWidth;
if (!clientWidth) return;
docEl.style.fontSize = 100 * (clientWidth / 375) + 'px';
};
if (!doc.addEventListener) return;
win.addEventListener(resizeEvt, recalc, false);
doc.addEventListener('DOMContentLoaded', recalc, false);
})(document, window);


为什么要设置html的font-size?

如果你把html的font-size设为20px,前面说过,rem就是html的字体大小,那么1rem = 20px。

此时,此时宽60px,高40px的元素样式就这样设置如下 ↓

width: 3rem;
height: 2rem;


那要是宽55px,高37px呢?然后经过换算,,设置如下 ↓

width: 2.75rem;
height: 1.85rem;


是不是发现这换算起来有点麻烦啊…

如果我们一开始把html的font-size设为100px呢?此时1rem = 100px,那么上面的

宽55px,高37px的元素样式就可以这么设置 ↓

width: 0.55rem;
height: 0.37rem;


是不是换算起来简单多了?!

所以我们可以先把html的字体大小设为100px,再通过简单的换算计算出各个元素的rem。

375是什么?

375其实就是你当前已经适配好的手机的屏幕宽度,就是在谷歌浏览器下模拟iPhone6的屏幕宽度,

我是以这个宽度来做原稿的,如果是在其他宽度下做的原稿则把375改成其它宽度。

2.vw

vw就是当前屏幕宽度的1%

补充一句,当设置width:100%,被设置元素的宽度是按照父元素的宽度来设置,

但是100vw是相对于屏幕可见宽度来设置的,所以会出现50vw 比50%大的情况

3.calc()

html{font-size:calc(100vw/3.75)} //3.75为psd设计稿尺寸/100


只需要html{font-size:calc(100vw/3.75)}就可完成以上js的效果 rem布局
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: