【移動適配】移動Web怎么做屏幕適配(一)

本文轉(zhuǎn)載于啃先生捧灰,首發(fā)于微信公眾號(啃先生)

http://www.cnblogs.com/giveiris/p/5233585.html

壹 | Fisrt

移動端適配的是什么?

我們討論的是網(wǎng)頁適配多種尺寸屏幕善榛,讓網(wǎng)頁效果看起來和設計師的設計稿一樣。說白了就是同一套代碼在不同分辨率的手機上跑時石景,頁面元素間的間距隔心,留白,以及圖片大小會隨著變化屈芜,在比例上跟設計稿一致。

舉個粟子吧

圖1. ?260*400的屏幕

圖2. ?380*400的屏幕

上邊的頁面在不同大小屏幕上的展現(xiàn)朴译,咋一看沒什么問題井佑,一般的工程師會認為已經(jīng)OK了,所以前端工程師很容易忽略屏幕適配眠寿。但是對于一些精益求精的產(chǎn)品而言躬翁,這還達不到要求。例如有以下問題:

圖1的屏幕的尺寸較小盯拱,因此頭像應該小些盒发,話題左邊的空白也應該小一些。

圖片應該保持正方形狡逢,而且兩張圖之間的邊距應該隨屏幕變化而變化

明白了宁舰,所以padding,margin奢浑,圖片等的大小基本都要做適配

貳 | Second

那有什么方法可以做到這種適配蛮艰?

關鍵要找到一種長度單位,使得一樣的取值雀彼,在不同尺寸的屏幕上的大小按比例縮放壤蚜。

長度單位我只知道px??

我將在下一期的文章里推有關viewport和css像素px中的細節(jié),這篇文章只關注如何適配详羡,所以先只談結(jié)論:

網(wǎng)頁在viewport中布局,viewport被分成一個個小方塊嘿悬,一個CSS像素占一個方塊

在設置了viewport寬度等于設備寬度的情況下实柠,通過某種算法,在不同大小的屏幕上善涨,1個CSS像素所占屏幕的物理尺寸是一樣大的

既然1個CSS像素在不同屏幕上物理尺寸一樣大窒盐,那px肯定不能做為適配的方法了

長度單位rem是相對于html標簽的font-size來計算的。例如html標簽設置font-size:36px钢拧,同時div設置width:1.2rem蟹漓。那么這個div的寬度就是1.2rem=36px*1.2=43.2px

如上面的例子,如果加載頁面的時候源内,使用JS根據(jù)屏幕的大小動態(tài)設置html標簽的font-size葡粒,隨著html標簽font-size的值變化,div的1.2rem換算成px的值 也跟著變化,即實現(xiàn)了div隨屏幕大小變化而變化嗽交,而CSS代碼始終是width:1.2rem卿嘲。以此類推到頁面所有的元素。

明白了夫壁,奧秘就在于結(jié)合px的固定尺寸和rem的相對尺寸拾枣!

叁 | Third

啃先生,原理我明白了盒让,你有沒有可執(zhí)行的具體方案??梅肤?

業(yè)內(nèi)比較流行的做法(參考阿里的flexible),有以下要點:

設置viewport為設備寬度(這里不一定邑茄,但目前先這樣足矣)

將viewport分成10rem姨蝴,并計算出1rem在當前瀏覽器的像素值,把它賦予html標簽的font-size(分成10rem只是為了方便計算而已)

寫CSS代碼時撩扒,遇到要適配的地方似扔,比如width,margin搓谆,padding等炒辉,就不要再用px了,改成用rem

JS和Html代碼如下:

CSS代碼做了類似如下的修改:

運行結(jié)果如下:邊距和頭像圖片都隨屏幕變化而變化了

肆 | Fourth

代碼量很少泉手,就是要理解消化黔寇。有一個問題,設計師給的設計稿尺寸單位都是用px斩萌,但是剛剛說的第3步缝裤,寫CSS的時候要用rem,這個怎么換算颊郎?會很麻煩

現(xiàn)有設計師提供寬度為400px的設計稿憋飞,其中某個圖片的寬度設計為20px,那么姆吭,CSS的寫法就是img{width: 0.05rem;}榛做,怎么得出這個結(jié)果的呢?

設計稿的寬度視同手機寬度内狸,即假設有一個viewport為400px的手機

將它分成10rem检眯,每個rem為40px;

那么圖片寬度20px自然就是0.5rem;

且慢,豈不是意味著昆淡,每次寫到尺寸的地方锰瘸,我都要先在草稿紙上把設計師給的px換算成rem?別急昂灵,sublime text 3有一款插件可以幫助你進行這個換算避凝,你只需要輸入20px舞萄,它會自動幫你換算成 0.5rem,看以下圖就秒懂了

參考

使用Flexible實現(xiàn)手淘H5頁面的終端適配(https://github.com/amfe/article/issues/17)

移動端高清恕曲、多屏適配方案(http://www.html-js.com/article/Mobile-terminal-H5-mobile-terminal-HD-multi-screen-adaptation-scheme%203041)

A tale of two viewports(http://www.quirksmode.org/mobile/viewports.html)

最后貼一下那個自動轉(zhuǎn)換單位的插件地址 https://github.com/flashlizi/cssrem

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鹏氧,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子佩谣,更是在濱河造成了極大的恐慌把还,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茸俭,死亡現(xiàn)場離奇詭異吊履,居然都是意外死亡,警方通過查閱死者的電腦和手機调鬓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門艇炎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來腾窝,“玉大人缀踪,你說我怎么就攤上這事『绺” “怎么了驴娃?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長循集。 經(jīng)常有香客問我唇敞,道長,這世上最難降的妖魔是什么咒彤? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任疆柔,我火速辦了婚禮,結(jié)果婚禮上镶柱,老公的妹妹穿的比我還像新娘旷档。我一直安慰自己,他們只是感情好歇拆,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布鞋屈。 她就那樣靜靜地躺著,像睡著了一般查吊。 火紅的嫁衣襯著肌膚如雪谐区。 梳的紋絲不亂的頭發(fā)上湖蜕,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天逻卖,我揣著相機與錄音,去河邊找鬼昭抒。 笑死评也,一個胖子當著我的面吹牛炼杖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播盗迟,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼坤邪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了罚缕?” 一聲冷哼從身側(cè)響起艇纺,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎邮弹,沒想到半個月后黔衡,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡腌乡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年盟劫,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片与纽。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡侣签,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出急迂,到底是詐尸還是另有隱情影所,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布袋毙,位于F島的核電站型檀,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏听盖。R本人自食惡果不足惜胀溺,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望皆看。 院中可真熱鬧仓坞,春花似錦、人聲如沸腰吟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽毛雇。三九已至嫉称,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間灵疮,已是汗流浹背织阅。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留震捣,地道東北人荔棉。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓闹炉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親润樱。 傳聞我的和親對象是個殘疾皇子渣触,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

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