本文主要介绍移动端如何用rem布局的两种使用方式
一、简单粗暴版(主流)
1.首先,准备对应的js
flexible.min.js代码如下:
//author:caibaojian
//website:http://caibaojian.com
//weibo:http:weibo.com/kujian
//这段js的最后面有两个参数记得要设置,一个为设计稿实际宽度,一个为制作稿最大宽度,例如设计稿为750,最大宽度为750,则为(750,750)
!function(e,t){function n(){var n=l.getBoundingClientRect().width;t=t||540,n>t&&(n=t);var i=100*n/e;r.innerHTML="html{font-size:"+i+"px;}"}var i,d=document,o=window,l=d.documentElement,r=document.createElement("style");if(l.firstElementChild)l.firstElementChild.appendChild(r);else{var a=d.createElement("div");a.appendChild(r),d.write(a.innerHTML),a=null}n(),o.addEventListener("resize",function(){clearTimeout(i),i=setTimeout(n,300)},!1),o.addEventListener("pageshow",function(e){e.persisted&&(clearTimeout(i),i=setTimeout(n,300))},!1),"complete"===d.readyState?d.body.style.fontSize="16px":d.addEventListener("DOMContentLoaded",function(e){d.body.style.fontSize="16px"},!1)}(640,828);
2.全局引入flexible.min.js,放在放在引入的css样式之前
<script type="text/javascript" src="../../js/lib/flexible.min.js">script>
注:也可以在局部html文件引入
3.注意:
如上述代码为640*828的设计稿,宽高比为1rem=50px(设计稿尺寸)
换算公式:设计稿像素/50=rem的值
举个栗子:设计稿需要图片宽高60px*60px
实际操作:图片的宽度为1.2rem高度为1.2rem
如果你的设计稿是750*1334请把最后连个参数改为(640,828)改为(750,750),换算依旧是1rem=50px,建议字体大小不用rem。
二、简单版(一劳永逸)
1.首先,封装js,然后引入,放在引入的css样式之前
(function (doc, win) {
var docEl = doc.documentElement,
resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
recalc = function () {
var clientWidth = docEl.clientWidth;
if (!clientWidth) return;
if(clientWidth>=640){
docEl.style.fontSize = '100px';
}else{
docEl.style.fontSize = 100 * (clientWidth / 640) + 'px';
}
};
if (!doc.addEventListener) return;
win.addEventListener(resizeEvt, recalc, false);
doc.addEventListener('DOMContentLoaded', recalc, false);
})(document, window);
2.注意:
如果页面的宽度超过了640px,那么页面中html的font-size恒为100px,否则,页面中html的font-size的大小为: 100 * (当前页面宽度 / 640) 所以,建议此处的设计稿宽度是640px的。
如上述代码为640*828的设计稿,宽高比为1rem=100px(设计稿尺寸)
举个栗子:设计稿需要图片宽高60px*60px
实际操作:图片的宽度为0.6rem高度为0.6rem
如果你的设计稿是750*1334,换算成rem的值则带有小数,极为不便。