开发一个移动端页面,需要等比例缩放,于是使用了 rem 单位,通过动态改变 html 元素 font-size 属性来实现页面缩放
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| html { font-size: 100px; }
.content { position: relative; left: 0; top: 0; width: 8rem; height: 14.24rem; background-image: url("./images/ceyice-bg.png"); background-repeat: no-repeat; background-size: cover; }
.index-title { position: absolute; top: 1.46rem; left: 50%; width: 4.95rem; height: 3.9rem; margin-left: -4.95rem/2; background-image: url("./images/index-title.png"); background-size: cover; }
|
html 初始设置为 100px 是为了避免 Chrome 下最小字体为 12px 导致页面错乱的问题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| // 动态设置 html 元素 font-size (function(win) { var doc = win.document; var docEl = doc.documentElement; var tid; function refresh var docW = docEl.getBoundingClientRect().width; // html设置字号,800 是原始psd文件的宽,100 是设置的初始 html 字体大小 docEl.style.fontSize = docW / 800 * 100 +'px'; } refresh //横屏时重设 html 的 font-size win.addEventListener('resize', function() { clearTimeout(tid); tid = setTimeout(refresh }, false); })(window);
|
结果偶遇一个超级奇葩的bug,安卓手机上页面不会缩放,iPhone下正常。
于是各种改 viewport ,各种查 rem 兼容性 ,查淘宝flexible 解决方案,各种…
开始以为是安卓手机的原因,最后发现只有 UC 会这样…真是哔了狗
原因是UC浏览器必须在页面加载完成前设置 html 元素的 font-size 属性, rem 单位才会生效,于是只要把上面那段代码放到 head 标签中就好了 :)
这就是我找了一下午的 bug ,手动再见…