多屏幕適配布局問題

移動(dòng)端布局闲礼,為了適配各種大屏手機(jī)贮缅,目前最好的方案莫過于使用相對(duì)單位 ?rem.

基于rem的原理唇聘,我們要做的就是針對(duì)不同手機(jī)屏幕尺寸,和dpr動(dòng)態(tài)的修改根節(jié)點(diǎn)HTML的font-size的大刑志隆(基準(zhǔn)值)脂信。

這里我們提取一個(gè)計(jì)算rem的公式:

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

說明:

1. 乘以dpr ,是因?yàn)轫?yè)面有可能為了實(shí)現(xiàn) 1px border 頁(yè)面會(huì)縮放(scale)1/ dpr 倍(如果沒有狰闪,dpr=1)疯搅。

2. 除以 10 ,這純粹是為了取整埋泵,方便計(jì)算幔欧,這個(gè)值可以是任何值,根據(jù)個(gè)人喜好定丽声。

所以就像礁蔗,下面這樣,HTML的font-size可能會(huì)是:

iPhone 3 : 320px / 10 = 32px;

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

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

對(duì)于動(dòng)態(tài)改變根節(jié)點(diǎn)的font-size雁社,我們可以通過css做浴井,也可以通過JavaScript做。

css方式歧胁,可以通過設(shè)備寬度來媒體查詢改變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; }

}

缺點(diǎn):通過設(shè)備寬度 ”范圍查詢“ 滋饲,這樣的媒體查詢來動(dòng)態(tài)改變r(jià)em基準(zhǔn)值,其實(shí)不夠精確喊巍,比如:寬度為360px和寬度320px的手機(jī)屠缭,因?yàn)槠翆捲谕粋€(gè)范圍區(qū)間內(nèi)(<375px),所以會(huì)被等同對(duì)待(rem基準(zhǔn)值相同),而事實(shí)上他們的屏幕寬度并不相等崭参,他們的布局也應(yīng)該有所不同呵曹。最終結(jié)論就是:這樣的做法,沒有做到足夠的精確何暮,但是夠用奄喂。

JavaScript方式,通過上面的公式海洼,計(jì)算出基準(zhǔn)值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;


// 設(shè)置viewport ,進(jìn)行縮放坏逢,達(dá)到高清的效果域帐;

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


//設(shè)置data-dpr屬性,留作css hack之用

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


//動(dòng)態(tài)寫入樣式

docEl.firstElementChild.appendChild(fontEl);

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


//給js調(diào)用的是整,某一dpr下rem和px之間的轉(zhuǎn)換函數(shù)

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;

這種方式可以精確的計(jì)算出不同屏幕所對(duì)應(yīng)的rem基準(zhǔn)值肖揣,缺點(diǎn)就是要加載一段js代碼,但是個(gè)人覺得這是目前最好的解決方式浮入。

因?yàn)檫@個(gè)方案同時(shí)解決了三個(gè)問題:

1. 1px border 的問題龙优。

2. 圖片高清問題。

3. 屏幕適配布局問題事秀。


字體大小問題

既然上面的方案會(huì)使得頁(yè)面縮放(scale)彤断,對(duì)于頁(yè)面區(qū)域的寬高野舶,我們可以依賴高清視覺稿,因?yàn)橐曈X稿本來就是x2的瓦糟,我們直接量就可以了筒愚,那么對(duì)于字體該如何處理那?


對(duì)于字體的縮放問題菩浙,設(shè)計(jì)師原本的要求是在任何手機(jī)屏幕上字體大小都要統(tǒng)一巢掺,所以我們針對(duì)不同的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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末先嬉,一起剝皮案震驚了整個(gè)濱河市轧苫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌疫蔓,老刑警劉巖含懊,帶你破解...
    沈念sama閱讀 206,013評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異衅胀,居然都是意外死亡岔乔,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門滚躯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來雏门,“玉大人,你說我怎么就攤上這事掸掏∽掠埃” “怎么了?”我有些...
    開封第一講書人閱讀 152,370評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵丧凤,是天一觀的道長(zhǎng)募闲。 經(jīng)常有香客問我,道長(zhǎng)愿待,這世上最難降的妖魔是什么浩螺? 我笑而不...
    開封第一講書人閱讀 55,168評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮呼盆,結(jié)果婚禮上年扩,老公的妹妹穿的比我還像新娘蚁廓。我一直安慰自己访圃,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,153評(píng)論 5 371
  • 文/花漫 我一把揭開白布相嵌。 她就那樣靜靜地躺著腿时,像睡著了一般况脆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上批糟,一...
    開封第一講書人閱讀 48,954評(píng)論 1 283
  • 那天格了,我揣著相機(jī)與錄音,去河邊找鬼徽鼎。 笑死盛末,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的否淤。 我是一名探鬼主播悄但,決...
    沈念sama閱讀 38,271評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼石抡!你這毒婦竟也來了檐嚣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,916評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤啰扛,失蹤者是張志新(化名)和其女友劉穎嚎京,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體隐解,經(jīng)...
    沈念sama閱讀 43,382評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鞍帝,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,877評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了厢漩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片膜眠。...
    茶點(diǎn)故事閱讀 37,989評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖溜嗜,靈堂內(nèi)的尸體忽然破棺而出宵膨,到底是詐尸還是另有隱情,我是刑警寧澤炸宵,帶...
    沈念sama閱讀 33,624評(píng)論 4 322
  • 正文 年R本政府宣布辟躏,位于F島的核電站,受9級(jí)特大地震影響土全,放射性物質(zhì)發(fā)生泄漏捎琐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,209評(píng)論 3 307
  • 文/蒙蒙 一裹匙、第九天 我趴在偏房一處隱蔽的房頂上張望瑞凑。 院中可真熱鬧,春花似錦概页、人聲如沸籽御。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽技掏。三九已至铃将,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間哑梳,已是汗流浹背劲阎。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評(píng)論 1 260
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鸠真,地道東北人悯仙。 一個(gè)月前我還...
    沈念sama閱讀 45,401評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像吠卷,于是被迫代替她去往敵國(guó)和親雁比。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,700評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 問題的由來 手機(jī)屏幕的分辨率差異很大撤嫩。 iphone4:320×480 iphone6:375×667 H5 網(wǎng)頁(yè)...
    尚山夏香閱讀 2,412評(píng)論 0 1
  • 移動(dòng)端布局偎捎,為了適應(yīng)大屏手機(jī),最好的方案是采用相對(duì) 單位rem基于rem的原理序攘,我們要做的就是: 針對(duì)不同...
    小韜wen閱讀 764評(píng)論 0 0
  • 剛開始做移動(dòng)端web開發(fā)的同學(xué)應(yīng)該都碰到過頁(yè)面適配問題茴她,為什么我在開發(fā)手機(jī)上調(diào)試好的頁(yè)面在其他手機(jī)會(huì)有這樣或那樣的...
    留七七閱讀 19,296評(píng)論 5 80
  • 了解真實(shí)的『REM』手機(jī)屏幕適配rem 作為一個(gè)低調(diào)的長(zhǎng)度單位,由于手機(jī)端網(wǎng)頁(yè)的興起程奠,在屏幕適配中得到重用丈牢。 使用...
    張憲宇閱讀 2,230評(píng)論 0 5
  • 2017年某年某月,對(duì)我來說是一個(gè)近乎絕望的日子瞄沙。 樓外春風(fēng)和煦己沛,鳥語花香,適合約上三兩個(gè)好友去走一走距境,散散心申尼,用...
    楠二閱讀 420評(píng)論 0 1