【移動端適配】用vw、vh+媒體查詢打造最完美的移動端適配方案

閒雲一鶴發表於2019-05-31

更新——前兩天寫的這篇文章未曾想能獲得這番熱烈反響,首先感謝大家的支援與抬愛,菜雞表示誠惶誠恐。我也是剛入掘金不久,本意是想在這個有原則的前端社群寫點文章,把平時積累多總結。一來有助於督促自己,二是希望能給有需要的朋友給予幫助。希望大佬們能多多發表意見或者建議,一起成長,進步!望輕拍,感激(ಥ _ ಥ) 一篇真正看了就會用的vw、wh適配教程

從古老的的百分比佈局+px+媒體查詢到rem佈局,一直沒找到心儀的移動端適配方案。網上搜尋的教程質量也是參差不齊(要麼配置過於繁瑣,要麼一篇文章到處抄襲),反正我看完了總有一種無從下手的無奈。所幸,經同事推薦找到一款完美的外掛。欣喜之餘,以作記錄。同時希望能給需要的朋友提供幫助。

移動端適配神器——postcss-px-to-viewport

這裡不多介紹vw、vh屬性,畢竟網上一搜一大把,本文章只有最純粹的乾貨。只需要通過包管理工具安裝postcss-px-to-viewport外掛後進行簡單配置就可以在頁面直接使用px單位,專案編譯後自動轉換為對應的vw或vh屬性

px轉vw、vh

1. 在Github搜尋 postcss-px-to-viewport

選擇星星最多的

【移動端適配】用vw、vh+媒體查詢打造最完美的移動端適配方案

英語渣表示看到有中文文件很是興奮

【移動端適配】用vw、vh+媒體查詢打造最完美的移動端適配方案

2. 安裝外掛

npm install postcss-px-to-viewport --save-dev
複製程式碼

3. 配置引數

【移動端適配】用vw、vh+媒體查詢打造最完美的移動端適配方案

這裡以vue cli3.x版本做參考,在package.json中配置

【移動端適配】用vw、vh+媒體查詢打造最完美的移動端適配方案

以上,現在程式碼中使用px就能直接轉為對應的vw、vh屬性了

通過媒體查詢處理邊界情況

一般來說使用px轉為vw、vh就可以應付99%的移動端適配了,但偶爾會有個別情況需要使用媒體查詢適配小屏解析度

比如以iphone6為基準佈局,看起來毫無問題

【移動端適配】用vw、vh+媒體查詢打造最完美的移動端適配方案

但在如iphone5等320畫素的解析度下就會有些瑕疵

【移動端適配】用vw、vh+媒體查詢打造最完美的移動端適配方案

明顯看到,字型重疊了。這時就可以請出法寶。用媒體查詢解決

【移動端適配】用vw、vh+媒體查詢打造最完美的移動端適配方案

程式碼意思是,當使用者手機解析度(寬度)為320畫素到340畫素之間的時候做相容處理,下面來看下處理後的效果

【移動端適配】用vw、vh+媒體查詢打造最完美的移動端適配方案

完美解決

解決元件庫衝突

當我們在專案中同時引入了postcss-px-to-viewport外掛及第三方元件庫時會出現樣式衝突。既第三方元件庫的px單位也被轉為了vh,會嚴重影響元件庫的美觀,這是我們不想看到的情況。

下面是有贊元件庫的彈窗元件,可以看到元件的px被誤轉為了vh,彈窗變得又醜又怪。

【移動端適配】用vw、vh+媒體查詢打造最完美的移動端適配方案

表面穩如虎,內心慌得一比。趕緊上官方文件看看有木有解決辦法(遇到問題首先看文件!看官方文件!)

【移動端適配】用vw、vh+媒體查詢打造最完美的移動端適配方案

直覺告訴我“selectorBlackList”可以解決問題, 趕緊在屬性裡面寫上"van",試試能否過濾匹配

【移動端適配】用vw、vh+媒體查詢打造最完美的移動端適配方案

儲存並回到頁面檢視效果

【移動端適配】用vw、vh+媒體查詢打造最完美的移動端適配方案

完美解決!

備註

一般元件庫的class命名都會帶上自己獨有的字首,所以我們藉助此字首名來進行過濾

總結

至於vw、vh屬性的相容性,從https://caniuse.com/網站給出的資料來看,pc端也許有點差強人意,但手機上基本可以放心使用了。(順帶吐槽一下瀏覽器相容性真是阻礙技術發展的礙腳石)

【移動端適配】用vw、vh+媒體查詢打造最完美的移動端適配方案

相關文章