rem布局在部分手机上显示不正常问题

问题描述:通过rem计算的宽度和手机上实际显示的宽度不一致,改用px跟预想一致。

导致原因:部分安卓手机或者webview调整了系统默认字体大小。此时在html根节点上设置的20px已经不是20px了,导致计算rem宽度出错。

解决办法:

1、计算实际字号:

var actualSize = parseFloat(window.getComputedStyle(document.documentElement)["font-size"]);

2、计算缩放比例:

var scale = actualSize / rem; //rem为原本设置的根节点字号

3、为保持页面其它元素不受影响,直接缩放rem:

var remScaled = rem / scale;

完整代码:

;(function(win) {
     var docEl = win.document.documentElement,
         tid;
 
     function refreshRem() {
         var width = docEl.getBoundingClientRect().width;
         var rem = width / 750*100;//以750px为原稿,除以100可得各元素的rem
         docEl.style.fontSize = rem + "px";
         var actualSize = parseFloat(window.getComputedStyle(docEl)["font-size"]);
         if (actualSize !== rem) {
             var remScaled = rem / ( actualSize / rem );
             docEl.style.fontSize = remScaled + "px"
         }
    }
 
     function dbcRefresh() {
         clearTimeout(tid);
         tid = setTimeout(refreshRem, 100)
     }
 
     win.addEventListener("resize", function() { dbcRefresh() }, false);
     win.addEventListener("pageshow", function(e) {
         if (e.persisted) { dbcRefresh() }
     }, false);
     refreshRem();
})(window);

 

转载于:https://my.oschina.net/u/879103/blog/1785521

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值