多屏幕適配布局問題

移動端布局,為了適配各種大屏手機,目前最好的方案莫過于使用相對單位 ?rem.

基于rem的原理,我們要做的就是針對不同手機屏幕尺寸,和dpr動態的修改根節點HTML的font-size的大小(基準值)。

這里我們提取一個計算rem的公式:

rem = document.documentElement.clientWidth * dpr / 10;

說明:

1. 乘以dpr ,是因為頁面有可能為了實現 1px border 頁面會縮放(scale)1/ dpr 倍(如果沒有,dpr=1)。

2. 除以 10 ,這純粹是為了取整,方便計算,這個值可以是任何值,根據個人喜好定。

所以就像,下面這樣,HTML的font-size可能會是:

iPhone 3 : 320px / 10 = 32px;

iPhone 4/5 :320px * 2 / 10 = 64px;

iPhone 6 : ? 375px * 2 / 10 = 75px;

對于動態改變根節點的font-size,我們可以通過css做,也可以通過JavaScript做。

css方式,可以通過設備寬度來媒體查詢改變HTML的font-size:

html { font-size : 32px; }

//iphone 6

@media( min-device-width : 375px ){

? ? ? ? ? ? ? html{ font-size : 64px; }

}

// iphone6 plus

@media( min-device-width : 414px ){

? ? ? ? ? html{ font-size : 75px; }

}

缺點:通過設備寬度 ”范圍查詢“ ,這樣的媒體查詢來動態改變rem基準值,其實不夠精確,比如:寬度為360px和寬度320px的手機,因為屏寬在同一個范圍區間內(<375px),所以會被等同對待(rem基準值相同),而事實上他們的屏幕寬度并不相等,他們的布局也應該有所不同。最終結論就是:這樣的做法,沒有做到足夠的精確,但是夠用。

JavaScript方式,通過上面的公式,計算出基準值rem,然后寫入樣式

var ?dpr , rem , scale;

var docEl = document.documentElement;

var fontEl = document.createElement("style");

var metaEl = document.querySelector("mate[name = 'viewport']");


dpr = window.devicePixelRatio || 1;

rem = docEl.clientWidth * dpr / 10;

scale = 1 / dpr;


// 設置viewport ,進行縮放,達到高清的效果;

metaEl.setAttribute('content','width=', + dpr * docEl.clientWidth + ',initial-scale='+scale+',maximum-scale='+scale+', minimum-scale='+scale+',user-scalable=no');


//設置data-dpr屬性,留作css hack之用

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


//動態寫入樣式

docEl.firstElementChild.appendChild(fontEl);

fontEl.innerHTML = 'html{font-size:' + rem + 'px !importment; }';


//給js調用的,某一dpr下rem和px之間的轉換函數

window.rem2px = function ( v ) {

? ? ? ?v = parseFloat ( v );

? ? ? ?return v * rem;

};

window.px2rem = function ( v ){

? ? ? ? v = parseFloat( v );

? ? ? ? return ?v / rem;

}

window.dpr = dpr;

window.rem = rem;

這種方式可以精確的計算出不同屏幕所對應的rem基準值,缺點就是要加載一段js代碼,但是個人覺得這是目前最好的解決方式。

因為這個方案同時解決了三個問題:

1. 1px border 的問題。

2. 圖片高清問題。

3. 屏幕適配布局問題。


字體大小問題

既然上面的方案會使得頁面縮放(scale),對于頁面區域的寬高,我們可以依賴高清視覺稿,因為視覺稿本來就是x2的,我們直接量就可以了,那么對于字體該如何處理那?


對于字體的縮放問題,設計師原本的要求是在任何手機屏幕上字體大小都要統一,所以我們針對不同的dpr直接使用px就可以了。

font-size : 16px;

[ data-dpr = '2' ] input {

? ? ? ?font-size : 32px;

}

字體不可以使用rem,誤差太大,且不能滿足任何屏幕下文字大小相同。

參考文檔:http://www.html-js.com/article/Mobile-terminal-H5-mobile-terminal-HD-multi-screen-adaptation-scheme%203041

手淘手機適配參考文章:http://blog.csdn.net/liujie19901217/article/details/51982403

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,283評論 6 530
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 97,947評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,094評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,485評論 1 308
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,268評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,817評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,906評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,039評論 0 285
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,551評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,502評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,662評論 1 366
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,188評論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,907評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,304評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,563評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,255評論 3 389
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,637評論 2 370

推薦閱讀更多精彩內容

  • 問題的由來 手機屏幕的分辨率差異很大。 iphone4:320×480 iphone6:375×667 H5 網頁...
    尚山夏香閱讀 2,440評論 0 1
  • 移動端布局,為了適應大屏手機,最好的方案是采用相對 單位rem基于rem的原理,我們要做的就是: 針對不同...
    小韜wen閱讀 770評論 0 0
  • 剛開始做移動端web開發的同學應該都碰到過頁面適配問題,為什么我在開發手機上調試好的頁面在其他手機會有這樣或那樣的...
    留七七閱讀 19,429評論 5 80
  • 了解真實的『REM』手機屏幕適配rem 作為一個低調的長度單位,由于手機端網頁的興起,在屏幕適配中得到重用。 使用...
    張憲宇閱讀 2,255評論 0 5
  • 2017年某年某月,對我來說是一個近乎絕望的日子。 樓外春風和煦,鳥語花香,適合約上三兩個好友去走一走,散散心,用...
    楠二閱讀 436評論 0 1