美文网首页让前端飞
Android部分webview rem计算误差记录

Android部分webview rem计算误差记录

作者: Tiny_z | 来源:发表于2017-12-29 09:53 被阅读806次

    前几天做了一个H5页面,使用rem来布局,然后在三星s8和s8+里面出现了rem计算出现误差的情况,截图如下

    源码
    s8+

    在页面rem计算完成后,用两种方式获取font-size。然后结果不一样,导致某些元素通过rem计算后的值,产生了误差

    修复

    通过比较document.documentElement.style.fontSize和window.getComputedStyle(document.documentElement)["font-size"]的差值,如果误差大于1,我们就重置html的font-size

    var html = document.getElementsByTagName('html')[0];
                var settedFs = settingFs = parseInt(html.style.fontSize);
                var whileCount = 0;
                while(true) {
                    var realFs = parseInt(window.getComputedStyle(html).fontSize);
                    var delta = realFs - settedFs;
                    if (Math.abs(delta) >= 1) //不相等
                    {
                        if (delta > 0) settingFs--; else settingFs++;
                        html.setAttribute('style', 'font-size:'+settingFs + 'px!important');
                    } else
                        break;
                    if (whileCount++ > 100) //之所以弄个100的循环跳出的原因,在于实在无法预判设备是否能计算得到36px,比如设备只能计算35px,37px,这样会死循环只能跳出了
                        break
                }
    

    安卓机就是名堂多

    参考

    lib-flexible
    vConsole

    相关文章

      网友评论

        本文标题:Android部分webview rem计算误差记录

        本文链接:https://www.haomeiwen.com/subject/xqtigxtx.html