移動端段適配一直都是我們開發過程中最頭疼的問題,下面總結了一些適配的方法,有的是轉自其它地方,由于本人水平有限,若有錯漏之處敬請諒解。
一、rem布局
代碼如下:
注意這段代碼一定要放在body之上,否則無效。
<script type="text/javascript">
(function (doc, win) {
var docEl = doc.documentElement,
// orientationchange 事件是在用戶水平或者垂直翻轉設備(即方向發生變化)時觸發的事件。
// onresize 事件會在窗口或框架被調整大小時發生。
resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
recalc = function () {
window.clientWidth = docEl.clientWidth;
if (!window.clientWidth) return;
docEl.style.fontSize = 40 * (window.clientWidth / 640) + 'px';
window.base = 40 * (window.clientWidth / 640);
};
if (!doc.addEventListener) return;
win.addEventListener(resizeEvt, recalc, false);
doc.addEventListener('DOMContentLoaded', recalc, false);
})(document, window);
</script>
也可參照http://caibaojian.com/flexible-js.html
二、首先請了解一下移動前端中 viewport (視口)http://www.css88.com/archives/5975
這里介紹一下幾個移動前端適配—低級、無趣、一堆問題的老方法。早在幾年前,移動前端適配有幾個很簡單使用的方法。那時屏幕尺寸或者說分辨率沒如今這么多。一般設計師設計移動端頁面統一按照640像素的寬度設計。因為當時的主流是iPhone4,iPhone4s ,iPhone5及iPhone5s,物理像素寬度為 640,分辨率為320。其他安卓機型可以根據這些尺寸做簡單粗暴的匹配。
例如下面是適配最簡單粗暴的方法,而且根據我平時查看項目的代碼的習慣,還有相對一部分項目還是使用這個方法做項目,或者維護項目:
<meta name="eqMobileViewport" content="width=320,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/>
看起來很簡單,也很實用。開發時候一切根據640的設計稿除以2處理,字體也用簡單的像素做單位(用rem換算麻煩)似乎是很完美,但是實際情況,特別是一些對齊,背景吻合總是會出現問題。還有就是用現在高分辨率的iPhone6s等手機看,總是會被設計師鄙視。
如今手機屏幕尺寸越來越多,可以稍微升級一下上面的方法,同樣在html頭部head標簽中先插入一個meta標簽,在插入一個腳本設置縮放值:
<meta id="eqMobileViewport" name="viewport" content="width=320, initial-scale=1, maximum-scale=1, user-scalable=no">
<script>
var g = document.documentElement.clientWidth / 320;
document.getElementById('eqMobileViewport').setAttribute("content", "width=320, initial-scale=" + g + ", maximum-scale=" + g + ", user-scalable=no")
</script>
這樣就比較完美了。
三、meta基礎知識
也可參照以下網站
http://www.daqianduan.com/6281.html
http://www.w3cfuns.com/notes/18165/f08c0ec910dad6d2c90807a0318abda8.html