移動端適配

1. 媒體查詢(廉頗老矣比规,尚能飯)

@media screen and (min-width: 375px){
    html {
        font-size: 14.0625px;   
    }
}
@media screen and (min-width: 360px){
    html {
        font-size: 13.5px;
    }
}
@media screen and (min-width: 320px){
    html {
        font-size: 12px;
    }
}
html {
    font-size: 16px;
}

能針對優(yōu)化若厚,但是屏幕尺寸太多,導致一些屏幕看起來不是那么合適蜒什,有點生硬测秸。內容的彈性自適應只會在臨界點的時候,突然變化灾常。

2. 百分比(廉頗老矣霎冯,尚能飯)

確定高度,寬度使用百分比钞瀑,這樣屏幕寬度變大的話沈撞,內容寬度也會隨之變大。能適應一般的情況雕什。

3. flex彈性布局

div {
    display: flex;
}

4. rem + viewport(比較成熟的方案)

<meta name="viewport" content="width=device-width, initial-scale=1.0,minimum-scale=1.0,maximumu-scale=1.0,user-scaleable=no">

width 網(wǎng)頁內容寬度等于設備寬度缠俺,把理想的視窗寬度設置為設備寬度

initial-scale 初始縮放比例,能起到 width=device-width 的作用

minimum-sacle 最小縮放比例

maximum-scale 最大縮放比例

user-scaleable 用戶能否進行縮放操作贷岸,yes/no

dpr(device pixel ratio)[設備像素比 = 設備像素 / 設備獨立像素]

一個物理(設備)像素是顯示器(手機屏幕)上最小的物理顯示單元壹士,在OS的調度下,每一個設備像素都有自己的顏色值和亮度值偿警。

設備獨立像素 (也叫目睹無關像素)躏救,也可以認為是計算機坐標系中的一個點,這個點代表一個可以由程序使用的虛擬像素(css像素)户敬,然后相關系統(tǒng)轉換為物理像素落剪。

像素只是一個抽象的單位,在不同的設備或不同的環(huán)境中尿庐,css中的1px所代表的設備物理像素是不同的。

dpr = 1的時候呢堰,css的1個像素點 抄瑟,對應一個物理像素點。

dpr = 2的時候,css的1個像素點皮假,對應4個物理像素點鞋拟,為什么是4個呢,因為寬對應是2倍惹资,高也對應是2倍贺纲。

dpr = 3,css的1個像素點褪测,對應9個像素點猴誊。

dpr > 1, 會帶來圖片會模糊的問題侮措,原理可以想象懈叹,一瓶藍墨水,如果混合在4倍的容器里面分扎,顏色是不是會比較淺澄成。1px邊框也是個問題,這個可以用偽元素 + transform 畏吓,scale:0.5 來解決墨状。

對于rem + viewport方案,html的font-szie大小菲饼,一般為窗口大小的0.1倍肾砂,或者設計稿的0.1倍,然后動態(tài)設置viewport巴粪;

var scale = 1 / window.devicePixelRatio;
document.querySelector('meta[name="viewport"]').setAttribute('content','initial-scale=' + scale + ', maximum-scale=' + scale + ', minimum-scale=' + scale + ', user-scalable=no');

布局的時候通今,各元素css尺寸 = 設計稿標注尺寸 / 設計稿橫向分辨率 / 10;

font-size可能需要額外的媒體查詢肛根,并且font-size不用rem辫塌;

有最大臨界點,比如物理分辨率大于1080派哲,可以訪問電腦端網(wǎng)頁臼氨。

搭配less或者sass會更好用

//定義一個變量和一個mixin
@baseFontSize: 75;//基于視覺稿橫屏尺寸/100得出的基準font-size
.px2rem(@name, @px){
    @{name}: @px / @baseFontSize * 1rem;
}
//使用示例:
.container {
    .px2rem(height, 240);
}
//less翻譯結果:
.container {
    height: 3.2rem;
}

其實可以參考阿里的 lib-flexible

5. vw, vh移動端設配新貴(設備版本 > android 4.3)

1vw表示1%的屏幕寬度,同理1vh也表示1%的屏幕高度芭届。

可以通過caniuse網(wǎng)站查詢vw適配情況储矩,android版本 > 4.4的都支持,ios支持比較好褂乍。

a. 所有布局都使用vw持隧,vh來做單位

設計稿 750px === 100vw

$vw_base: 750; 
@function vw($px) {
    @return ($px / 750) * 100vw;
}

b. 沿用rem單位,vw只用于html的font-size上面逃片,這樣可以避免使用js來動態(tài)計算根元素字體大小屡拨。用sass計算

// rem 單位換算:定為 75px 只是方便運算,750px-75px、640-64px呀狼、1080px-108px裂允,如此類推
$vw_fontsize: 75; // iPhone 6尺寸的根元素大小基準值
@function rem($px) {
     @return ($px / $vw_fontsize ) * 1rem;
}
// 根元素大小使用 vw 單位
$vw_design: 750;
html {
    font-size: ($vw_fontsize / ($vw_design / 2)) * 100vw; //就是相當于20vw
    // 同時,通過Media Queries 限制根元素最大最小值
    @media screen and (max-width: 320px) {
        font-size: 64px;
    }
    @media screen and (min-width: 540px) {
        font-size: 108px;
    }
}
// body 也增加最大最小寬度限制哥艇,避免默認100%寬度的 block 元素跟隨 body 而過大過小
body {
    max-width: 540px;
    min-width: 320px;
}

這部分代碼參考了利用視口單位實現(xiàn)適配布局 | Aotu.io「凹凸實驗室」

如果是用calc來計算绝编,比如

html{
     font-size: calc(16px + 2 * (100vw - 375px) / 225);
}

要注意,Safari不支持這樣貌踏,不過它支持將字體大小相對于10px的百分比的計算十饥,如

html{
     font-size: calc(100% + 2 * (100vw - 375px) / 225);
}

此處可查看基于vw等viewport視區(qū)單位配合rem響應式排版和布局 獲得更詳細的信息。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末哩俭,一起剝皮案震驚了整個濱河市绷跑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌凡资,老刑警劉巖砸捏,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異隙赁,居然都是意外死亡垦藏,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門伞访,熙熙樓的掌柜王于貴愁眉苦臉地迎上來掂骏,“玉大人,你說我怎么就攤上這事厚掷〉茏疲” “怎么了?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵冒黑,是天一觀的道長田绑。 經(jīng)常有香客問我,道長抡爹,這世上最難降的妖魔是什么掩驱? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮冬竟,結果婚禮上欧穴,老公的妹妹穿的比我還像新娘。我一直安慰自己泵殴,他們只是感情好涮帘,可當我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著笑诅,像睡著了一般焚辅。 火紅的嫁衣襯著肌膚如雪映屋。 梳的紋絲不亂的頭發(fā)上苟鸯,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天同蜻,我揣著相機與錄音,去河邊找鬼早处。 笑死湾蔓,一個胖子當著我的面吹牛,可吹牛的內容都是我干的砌梆。 我是一名探鬼主播默责,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼咸包!你這毒婦竟也來了桃序?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤烂瘫,失蹤者是張志新(化名)和其女友劉穎媒熊,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坟比,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡芦鳍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了葛账。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片柠衅。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖籍琳,靈堂內的尸體忽然破棺而出菲宴,到底是詐尸還是另有隱情,我是刑警寧澤趋急,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布喝峦,位于F島的核電站,受9級特大地震影響宣谈,放射性物質發(fā)生泄漏愈犹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一闻丑、第九天 我趴在偏房一處隱蔽的房頂上張望漩怎。 院中可真熱鬧,春花似錦嗦嗡、人聲如沸勋锤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽叁执。三九已至茄厘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谈宛,已是汗流浹背次哈。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留吆录,地道東北人窑滞。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像恢筝,于是被迫代替她去往敵國和親哀卫。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內容

  • 不知不覺做前端已經(jīng)兩年了撬槽,從PC端此改,移動端,微信小程序一路走來到今天剛剛開放注冊的快應用(手機廠商對抗小程序的新技...
    是ADI呀閱讀 3,117評論 0 10
  • 本文首發(fā)于 https://blog.lenconda.top/posts/2018/04/11/mobile_a...
    Lenconda閱讀 1,255評論 0 5
  • 最近在重構公司的一個移動端項目侄柔,除了需要對新項目進行前端技術棧的搭建外共啃,還需要考慮的一個重要問題就是移動端適配,關...
    淘淘笙悅閱讀 1,734評論 1 24
  • 前言:這周工作碰到了移動端1px的問題勋拟。以前一直寫樣式也沒有特別注意著一點勋磕。還有就是rem的原理。這些其實就是比較...
    奮斗的香蕉閱讀 449評論 0 1
  • 誰有一顆玲瓏剔透的心敢靡,他就會知道何時心碎挂滓。圖片來源網(wǎng)絡 foreword 這篇總結了我個人所知道的一些關于移...
    禾小沐的技術與生活閱讀 30,840評論 2 33