移動端前端適配方案(總結) -- 面試重點

關于移動端適配的技術方案:
(1)通過媒體查詢的方式即CSS3的meida queries
(2)以天貓首頁為代表的 flex 彈性布局
(3)以淘寶首頁為代表的 rem+viewport縮放
(4)rem 方式

1.Media Queries

meida queries 的方式可以說是我早期采用的布局方式褥符,它主要是通過查詢設備的寬度來執(zhí)行不同的 css 代碼崇众,最終達到界面的配置。核心語法是:

@media screen and (max-width: 600px) { /當屏幕尺寸小于600px時舅踪,應用下面的CSS樣式/
/你的css代碼/
}

優(yōu)點

media query可以做到設備像素比的判斷,方法簡單道偷,成本低瘫怜,特別是對移動和PC維護同一套代碼的時候。目前像Bootstrap等框架使用這種方式布局
圖片便于修改前塔,只需修改css文件
調(diào)整屏幕寬度的時候不用刷新頁面即可響應式展示

缺點

代碼量比較大,維護不方便
為了兼顧大屏幕或高清設備承冰,會造成其他設備資源浪費华弓,特別是加載圖片資源
為了兼顧移動端和PC端各自響應式的展示效果,難免會損失各自特有的交互方式

2.Flex彈性布局

以天貓的實現(xiàn)方式進行說明:
它的viewport是固定的:<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
高度定死困乒,寬度自適應寂屏,元素都采用px做單位。

隨著屏幕寬度變化娜搂,頁面也會跟著變化迁霎,效果就和PC頁面的流體布局差不多,在哪個寬度需要調(diào)整的時候使用響應式布局調(diào)調(diào)就行(比如網(wǎng)易新聞)百宇,這樣就實現(xiàn)了『適配』考廉。

3.rem + viewport 縮放

這也是淘寶使用的方案,根據(jù)屏幕寬度設定 rem 值携御,需要適配的元素都使用 rem 為單位昌粤,不需要適配的元素還是使用 px 為單位。(1em = 16px)
PS:rem
rem是CSS3新增的一個相對單位(root em啄刹,根em)涮坐,這個單位引起了廣泛關注。這個單位與em有什么區(qū)別呢誓军?
區(qū)別在于使用rem為元素設定字體大小時膊升,仍然是相對大小,但相對的只是HTML根元素谭企。這個單位可謂集相對大小和絕對大小的優(yōu)點于一身廓译,通過它既可以做到只修改根元素就成比例地調(diào)整所有字體大小,又可以避免字體大小逐層復合的連鎖反應债查。目前非区,除了IE8及更早版本外,所有瀏覽器均已支持rem盹廷。對于不支持它的瀏覽器征绸,應對方法也很簡單,就是多寫一個絕對單位的聲明俄占。這些瀏覽器會忽略用rem設定的字體大小管怠。比如:p{font-size:14px;font-size:0.875rem;}
(推薦一個單位轉(zhuǎn)換的工具:http://pxtoem.com/)

實現(xiàn)原理
根據(jù)rem將頁面放大dpr倍, 然后viewport設置為1/dpr.

如iphone6 plus的dpr為3, 則頁面整體放大3倍, 1px(css單位)在plus下默認為3px(物理像素)
然后viewport設置為1/3, 這樣頁面整體縮回原始大小. 從而實現(xiàn)高清。

這樣整個網(wǎng)頁在設備內(nèi)顯示時的頁面寬度就會等于設備邏輯像素大小缸榄,也就是device-width渤弛。
這個device-width的計算公式為:設備的物理分辨率/(devicePixelRatio * scale),
在scale為1的情況下甚带,device-width = 設備的物理分辨率/devicePixelRatio 她肯。

4、rem實現(xiàn)

比如說“魅族”移動端的實現(xiàn)方式鹰贵,viewport也是固定的:
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">晴氨。
通過以下代碼來控制rem基準值(設計稿以720px寬度量取實際尺寸)

!function (d) {
    var c = d.document;
    var a = c.documentElement;
    var b = d.devicePixelRatio;
    var f;

    function e() {
      var h = a.getBoundingClientRect().width, g;
      if (b === 1) {
        h = 720
      }
      if(h>720) h = 720;//設置基準值的極限值
      g = h / 7.2;
      a.style.fontSize = g + "px"
    }

    if (b > 2) {
      b = 3
    } else {
      if (b > 1) {
        b = 2
      } else {
        b = 1
      }
    }
    a.setAttribute("data-dpr", b);
    d.addEventListener("resize", function () {
      clearTimeout(f);
      f = setTimeout(e, 200)
    }, false);
    e()
  }(window);

css通過sass預編譯,設置量取的px值轉(zhuǎn)化rem的變量$px: (1/100)+rem;

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末碉输,一起剝皮案震驚了整個濱河市籽前,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌敷钾,老刑警劉巖枝哄,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異闰非,居然都是意外死亡膘格,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門财松,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瘪贱,“玉大人,你說我怎么就攤上這事辆毡〔饲兀” “怎么了?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵舶掖,是天一觀的道長球昨。 經(jīng)常有香客問我,道長眨攘,這世上最難降的妖魔是什么主慰? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任嚣州,我火速辦了婚禮,結果婚禮上共螺,老公的妹妹穿的比我還像新娘该肴。我一直安慰自己,他們只是感情好藐不,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布匀哄。 她就那樣靜靜地躺著,像睡著了一般雏蛮。 火紅的嫁衣襯著肌膚如雪涎嚼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天挑秉,我揣著相機與錄音法梯,去河邊找鬼。 笑死衷模,一個胖子當著我的面吹牛鹊汛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播阱冶,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼刁憋,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了木蹬?” 一聲冷哼從身側(cè)響起至耻,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎镊叁,沒想到半個月后尘颓,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡晦譬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年疤苹,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片敛腌。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡卧土,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出像樊,到底是詐尸還是另有隱情尤莺,我是刑警寧澤,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布生棍,位于F島的核電站颤霎,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜友酱,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一晴音、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧粹污,春花似錦段多、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽加缘。三九已至鸭叙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拣宏,已是汗流浹背沈贝。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留勋乾,地道東北人宋下。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像辑莫,于是被迫代替她去往敵國和親学歧。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351

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

  • @(概述)[基本概念|百分比|rem|vw/vh|響應式設計] 移動端web頁面的開發(fā)各吨,由于手機屏幕尺寸枝笨、分辨率不...
    jluemmmm閱讀 76,904評論 1 42
  • 盤點移動端適配方案 作為開發(fā)者,在手機移動端做適配的時候會出現(xiàn)很多問題:最不希望用戶看到的就是橫向滾動條揭蜒。其次是文...
    learninginto閱讀 634評論 0 4
  • 最近抽空看了看移動端適配的一些文章横浑,也結合自己的經(jīng)驗做一下總結以及對比。 那么屉更,開始正題徙融,首先說說到目前位置出現(xiàn)的...
    Haley_han閱讀 14,742評論 1 32
  • 一、設備的css像素是不同的 1. CSS像素(邏輯像素) 可通過瀏覽器F12控制臺查看不同機型的css像素瑰谜,比如...
    winfyho閱讀 1,230評論 0 1
  • 黑色的海島上懸著一輪又大又圓的明月似舵,毫不嫌棄地把溫柔的月色照在這寸草不生的小島上脚猾。一個少年白衣白發(fā),悠閑自如地倚坐...
    小水Vivian閱讀 3,102評論 1 5