移動端開發多設備適配

一、移動端多設備適配

  參考了手機淘寶:

  針對安卓所有設備,devicePixelRatio(簡稱dpr),統一當作“1”處理,即一倍屏;然後viewport的寬度就等於device-width,但是淘寶的做法是沒有對viewport的width做明確指定,僅指定了scale值;因爲瀏覽器實際上會根據scale來設置viewport的寬度;

  針對ios,則存在2倍,3倍屏;


 最終就是根據dpr來確定html根元素的字體大小,所有元素的寬高以rem單位來展示;

 

  這裏有一個基準值,就是設計稿的尺寸,比如設計稿是640*960,則這個基準值是64;具體可參考這篇文章:http://www.html-js.com/article/Mobile-terminal-H5-mobile-terminal-HD-multi-screen-adaptation-scheme%203041

;(function(){
            var win = window, doc = document, docEl = doc.documentElement;
            var ios = win.navigator.appVersion.match(/iPhone/i), dpr = win.devicePixelRatio || 1, finalDpr = dpr;

            //僅針對iPhone做倍屏處理,即其它平臺dpr=1;
            if(!ios){
                finalDpr = 1;
            }

            var scale = 1 / finalDpr;

            var metaEl = doc.querySelector('meta[name="viewport"]');
            metaEl.setAttribute('content', 'initial-scale=' + scale + ',maximum-scale=' + scale + ', minimum-scale=' + scale + ',user-scalable=0');

            docEl.setAttribute('data-dpr', finalDpr);

            var width = docEl.getBoundingClientRect().width;

            //針對安卓屏幕寬度超過設計稿尺寸時,限制最寬爲640,也就是說rem最大爲64px;
            if(width / finalDpr > 640){
                width = 640 * finalDpr;
            }
            docEl.style.fontSize = width  / 10 + 'px';

        })()


另外一個注意事項是,頁面初始化是需要指定一個viewport(淘寶是可以動態創建)

<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=0">


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章