利用原生js作手机端网页自适应解决方案rem布局css
刚开始我用的是下面这段代码,而后js经过外部连接引入,最后每次用手机刷新网页的时候都会出现缩略图html
function getRem(pwidth, prem) {
var html = document.getElementsByTagName("html")[0];
var oWidth = document.body.clientWidth || document.documentElement.clientWidth;
html.style.fontSize = oWidth / pwidth * prem + "px";
}
$(document).ready(function () {
getRem(750, 100);
});
而后我试着写在html页面,也会出现短暂的缩略图,做为一个处女座的我来讲,是绝对不容许的。
因此我在网上找了不少代码,发现他们有的只能在电脑上F12测试,并不能用手机上面的浏览器进行测试,还有其余一些也不能兼容。
最后我找到了网易的rem自适应代码。
(function(doc, win) {
var docEl = doc.documentElement,
isIOS = navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/),
dpr = isIOS ? Math.min(win.devicePixelRatio, 3) : 1,
dpr = window.top === window.self ? dpr : 1, //被iframe引用时,禁止缩放
dpr = 1,
scale = 1 / dpr,
resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize';
docEl.dataset.dpr = dpr;
var metaEl = doc.createElement('meta');
metaEl.name = 'viewport';
metaEl.content = 'initial-scale=' + scale + ',maximum-scale=' + scale + ', minimum-scale=' + scale;
docEl.firstElementChild.appendChild(metaEl);
var recalc = function() {
var width = docEl.clientWidth;
if (width / dpr > 750) {
width = 750 * dpr;
}
// 乘以100,px : rem = 100 : 1
docEl.style.fontSize = 100 * (width / 750) + 'px';
};
recalc()
if (!doc.addEventListener) return;
win.addEventListener(resizeEvt, recalc, false);
})(document, window);
通过测试,在电脑上和手机上的测试,都兼容全部分辨率的手机,而且还能随着屏幕宽度进行实时变化。
这样就不用考虑 $(window).resize(function () {})
惟一的不便就是不能经过外部连接的形式引入js,只能写在每一个页面的head里面,用内联的方式写进html页面。
上面的比例是750:100,按照设计图上面,全部大小都要除以100.
例:
未引入前:浏览器
body { width: 750px; height: 640px; }
引入后:除以100并将px换成remapp
body { width: 7.5rem; height: 6.4rem; }