一、rem 适配基本概念:
对于移动端的开发,rem 适配必不可少,我们可以用多种方式实现, 根据 html 的 fontSize 属性值为基准,其它所有的 rem 值,根据这个基准计算。我们根据屏幕宽度用 js 动态修改了 html 的 fontSize 属性值,达到移动端适配的目的。
二、布局方案:
方案1:
在 index.html 中添加如下代码
<script>
let html = document.documentElement;
window.rem = html.getBoundingClientRect().width / 16 ;
html.style.fontSize = window.rem + ‘px‘;
</script>
这里基于宽 320px 的屏幕分成了 16 份,也就是 1rem = 20px,目前大多数设计稿都是根据 iphone6 的宽( 375px )走的,建议大家在这里分成 25 份,也就是 1rem = 15px,计算起来方便些。
方案2:
在 index.html 中添加如下代码
<script>
(function(win, doc) {
var h;
win.addEventListener(‘resize‘, function() {
clearTimeout(h);
h = setTimeout(setUnitA, 500);
}, false);
win.addEventListener(‘pageshow‘, function(e) {
if (e.persisted) {
clearTimeout(h);
h = setTimeout(setUnitA, 300);
}
}, false);
var setUnitA = function() {
doc.documentElement.style.fontSize = doc.documentElement.clientWidth / 16 + ‘px‘;
};
setUnitA();
})(window, document)
</script>
延展:
1:http://www.cnblogs.com/TomXu/archive/2011/12/31/2289423.html
自执行匿名函数和立即执行的函数表达式区别:
我们一直叫自执行函数,确切的说是自执行匿名函数(Self-executing anonymous function),但此英文原文作者一直倡议使用立即调用的函数表达式(Immediately-Invoked Function Expression)这一名称,
// 这是一个自执行的函数,函数内部执行自身,递归
function foo() { foo(); }
// 这是一个自执行的匿名函数,因为没有标示名称
// 必须使用arguments.callee属性来执行自己
var foo = function () { arguments.callee(); };
// 这可能也是一个自执行的匿名函数,仅仅是foo标示名称引用它自身
// 如果你将foo改变成其它的,你将得到一个used-to-self-execute匿名函数
var foo = function () { foo(); };
// 有些人叫这个是自执行的匿名函数(即便它不是),因为它没有调用自身,它只是立即执行而已。
(function () { /* code */ } ());
// 为函数表达式添加一个标示名称,可以方便Debug
// 但一定命名了,这个函数就不再是匿名的了
(function foo() { /* code */ } ());
// 立即调用的函数表达式(IIFE)也可以自执行,不过可能不常用罢了
(function () { arguments.callee(); } ());
(function foo() { foo(); } ());
// 另外,下面的代码在黑莓5里执行会出错,因为在一个命名的函数表达式里,他的名称是undefined
// 呵呵,奇怪
(function foo() { foo(); } ());
注:arguments.callee在ECMAScript 5 strict mode里被废弃了,所以在这个模式下,其实是不能用的。
2:这里为什么要把windows、document作为参数传进去?
一句话,使全局变量以参数形式变成自执行函数内部的局部变量。
至于为什么这么做,提高程序效率。为什么能提高效率,得从javascript的机制说起,所谓的scope chain作用域链,在当前作用域中如果没有该属性(局部变量)则向上一层作用域中寻找,一直到最上层,也就是window。也就是说全局变量和下级作用域都是window的一个属性,向下依此类推。
参考:https://segmentfault.com/q/1010000000311686
移动端rem布局实践
原文:http://www.cnblogs.com/linsanshu/p/6257719.html