理解html移動端開發屏幕適配問題(包括小程序)

一、小程序

規定屏幕寬度爲20rem;1rem = (750/20)rpx ; 一行750rpx ; 1rpx = 0.5px ; 基於iPhone6 的設計稿,實際屏幕375px ; 基於iphone4或者iphone5,實際屏幕寬度340px=640rpx,根據設計情況計算
rpx(responsive pixel): 可以根據屏幕寬度進行自適應。規定屏幕寬爲750rpx。如在 iPhone6 上,屏幕寬度爲375px,共有750個物理像素,則750rpx = 375px = 750物理像素,1rpx = 0.5px = 1物理像素。

二、理解淘寶、網易適配做法

網易的做法整理:
設計稿是基於iphone4或者iphone5來的,橫向分辨率爲640px,這時取一個100px的font-size爲參照,那麼body元素的寬度就可以設置爲width: 6.4rem,於是html的font-size=deviceWidth / 6.4。deviceWidth就是viewport設置中的那個deviceWidth(通過document.documentElement.clientWidth可以取到),當我們DOM準備好後,第一件做的事情就是:document.documentElement.style.fontSize = document.documentElement.clientWidth / 6.4 + 'px';(6.4是根據設計稿的橫向分辨率/100得來的),具體分以下步驟:
1、先拿設計稿豎着的橫向分辨率除以100得到body元素的寬度:
如果設計稿基於iphone6,橫向分辨率爲750,body的width爲750 / 100 = 7.5rem如果設計稿基於iphone4/5,橫向分辨率爲640,body的width爲640 / 100 = 6.4rem
2、佈局時,設計圖標註的尺寸除以100得到css中的尺寸
3、在dom ready以後,通過以下代碼設置html的font-size:
document.documentElement.style.fontSize = document.documentElement.clientWidth / 6.4(如果是750的設計稿,應該除以7.5) + 'px';
4、font-size可能需要額外的媒介查詢,並且font-size不能使用rem,如網易的設置:
@media screen and (max-width:321px){ .m-navlist{font-size:15px}}@media screen and (min-width:321px) and (max-width:400px){ .m-navlist{font-size:16px}}@media screen and (min-width:400px){ .m-navlist{font-size:18px}}
5、視口設置:
<meta name="viewport" content="initial-scale=1,maximum-scale=1, minimum-scale=1">
6、當deviceWidth大於設計稿的橫向分辨率時,html的font-size始終等於橫向分辨率/body元素寬:
增加一個判斷來判斷當前視口的寬度
var deviceWidth = document.documentElement.clientWidth;if(deviceWidth > 640) deviceWidth = 640;document.documentElement.style.fontSize = deviceWidth / 6.4 + 'px';

優點:一開始設置100px=1rem,利於計算
淘寶做法整理:
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">,原理:js動態改變scale,device-width=設備的物理分辨率/(devicePixelRatio * scale),在scale爲1的情況下,device-width = 設備的物理分辨率/devicePixelRatio 。(devicePixelRatio稱爲設備像素比)
設計稿是基於iphone6來的,橫向分辨率爲750px,
1、動態設置viewport的scale
var scale = 1 / devicePixelRatio;document.querySelector('meta[name="viewport"]').setAttribute('content','initial-scale=' + scale + ', maximum-scale=' + scale + ', minimum-scale=' + scale + ', user-scalable=no');
2、動態計算html的font-size
document.documentElement.style.fontSize = document.documentElement.clientWidth / 10 + 'px';
3、佈局的時候,各元素的css尺寸=設計稿標註尺寸/設計稿橫向分辨率/10
4、font-size可能需要額外的媒介查詢,並且font-size不使用rem,這一點跟網易是一樣的。
5、使用less利於計算寫法
@baseFontSize: 75;//基於視覺稿橫屏尺寸/100得出的基準font-size.px2rem(@name, @px){ @{name}: @px / @baseFontSize * 1rem;}
//使用示例:
.container { .px2rem(height, 240);}
//less翻譯結果:.container { height: 3.2rem;}
優點:在不同屏幕適配清晰度不受影響,而網易的做法在不同屏幕適配時清晰度有時會受影響



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