<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); });