<head>
标签内加入viewport(以下),参数分别表示:页面宽度= 屏幕宽度,最大和最小伸缩比都是1,不容许用户拉缩。<meta name="viewport" content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0"/>
优势:宽度之间无缝衔接, 操做起来也相对比较方便。javascript
缺点:字体大小须要另一套自适应方法来调整;当屏幕宽度大于700px后,继续按照百分比元素会偏大,这个时候调整起来会比较麻烦。html
<html>
或<body>
的fontsize。再用rem, em替代 px做为单位实现自适应。优势:能够根据不一样屏幕宽度来设置,能够完美解决上面说的屏幕偏大时的比例问题。字体的大小也不存在问题。java
缺点:根据宽度区间来设置,没法实现无缝变换。测试
在参考淘宝网的自适应方法时,偶然发现页面<html>
的fontsize会根据屏幕的宽度自动调整,并且屏幕宽度和所设字体大小的商是必定的。
因而猜测它是用JS获取屏幕宽度后,按照固定比例缩小后做为rem的单位长度实现自适应。
这不就是优势全有滴解决方法吗!?请允许我激动一下下(☆_☆)字体
JS代码写起来很是简单,并且完美解决了用rem来设置没法达到无缝衔接的问题。
但移动端测试后问题就出现了,移动端safari在html加载完毕以前将JS以迅雷不及掩耳盗铃之势执行了,在页面没有按照viewport设置好宽度前,JS就读取了错误的宽度,致使元素变成原来的两倍大0^0, 须要用setTimeout()
解决问题。ui
Zepto(function($){ var win = window, doc = document; function setFontSize() { var winWidth = $(window).width(); // 640宽度以上进行限制 var size = (winWidth / 640) * 100; doc.documentElement.style.fontSize = (size < 100 ? size : 100) + 'px' ; }; //防止在html未加载完毕时执行,保证获取正确的页宽 setTimeout(function(){ // 初始化 setFontSize(); }, 200); });