px2rem适配方案,实现平滑适配

在移动端开发时候,为了解决不同的机型适配问题。我们常常会用mediaQue(媒体查询)依据每种机型写多套适配代码。这种方法固然能解决适配问题,但是mediaQue(媒体查询)代码量太多了,不美观,且不利于维护,而rem可以解决上述的问题。
rem的核心在于通过动态设置根元素(html)的font-size来实现rem大小的变化。我们知道浏览器的默认的font-size16px,(有些浏览器例外),也就是1rem = 16px, 16px = 1rem

用法一:当可视区域大于设计稿所提供的宽度时,将文档宽度固定为设计稿宽度。
(function (doc, win,design_width) {
  var docEl = doc.documentElement,//获取文档节点
//   判断手机是横屏还是竖屏
// orientationchange 事件是在用户水平或者垂直翻转设备(即方向发生变化)时触发的事件。
    resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
    recalc = function () {
        //获取文档的宽度,clientWidth= width+左右padding
        var clientWidth = docEl.clientWidth;
        //如果文档宽度获取失败, 直接返回
        if (!clientWidth) return;
        if(clientWidth >= design_width){
            //文档宽度大于图纸宽度时,文档宽度等于图纸宽度
            docEl.style.fontSize = '100px';
      }else{
        //文档宽度小于图纸宽度,动态设置html字体大小
        docEl.style.fontSize = 100  * (clientWidth / design_width) + 'px';
      }
    };
  if (!doc.addEventListener) return;
  win.addEventListener(resizeEvt, recalc, false);
  doc.addEventListener('DOMContentLoaded', recalc, false);
})(document, window,750);
用法二:不考虑可视区域的大小,文档宽度为100%
(function (doc, win,design_width) {
  var docEl = doc.documentElement,//获取文档节点
//   判断手机是横屏还是竖屏
// orientationchange 事件是在用户水平或者垂直翻转设备(即方向发生变化)时触发的事件。
    resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
    recalc = function () {
        //获取文档的宽度,clientWidth= width+左右padding
        var clientWidth = docEl.clientWidth;
        //如果文档宽度获取失败, 直接返回
        if (!clientWidth) return;
        //动态设置html字体大小
        docEl.style.fontSize = 100  * (clientWidth / design_width) + 'px';
    };
  if (!doc.addEventListener) return;
  win.addEventListener(resizeEvt, recalc, false);
  doc.addEventListener('DOMContentLoaded', recalc, false);
})(document, window,750);

使用方法:

写样式时ui图所量宽度为750px,rem布局中为7.5rem(也就是说 750 / 100=7.5rem
如: .wraps{ width: 7.5m; height: 5rem; font-size: .16rem; margin: 0 auto; text-align: center; color: #fff; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值