1、利用lib-flexible、postcss-px2rem插件 進行移動端rem適配。
javascript
一、第一css
引入lib-flexible . html
安裝lib-flexible: npm i lib-flexible --save-devjava
在項目的入口main.js文件中引入lib-flexible: import 'lib-flexible',webpack
在index.html中去掉meta name="viewport" 標籤 由於 lib-flexble插件會自動計算添加meta name="viewport" 視口標籤git
二、第二web
使用postcss-px2rem自動將css中的px轉換成rem(真的是大大提高了咱們的工做效率,棒棒的,不用本身去瞎算啊)npm
安裝postcss-px2rem : npm install postcss-px2rem --save-dev瀏覽器
三、配置postcss
在build文件夾中找到 utils.js ,配置以下:佈局
function generateLoaders(loader, loaderOptions) { const loaders = options.usePostCSS ? [cssLoader, px2remLoader] : [cssLoader,px2remLoader ]; if (loader) { loaders.push({ loader: loader + '-loader', options: Object.assign({}, loaderOptions, { sourceMap: options.sourceMap }) }); } if (options.extract) { return ExtractTextPlugin.extract({ use: loaders, publicPath:'../../', fallback: 'style-loader' }); } else { return ['style-loader'].concat(loaders); } }
五、最後,咱們須要知道flexible的轉換不包括第三方ui庫,具體去官網看下:網上有許多解決辦法,首先咱們要知道,根源是由於移動端ui庫,原本就是適配了移動端尺寸,而fliexble再去適配一次,能不變小嗎?
那麼就知道解決辦法了,總結大體以下:
一、固定縮放比,即dpr爲1,不推薦,全局設置不易調控;
二、給不但願轉化rem的組件,設置px的時候,單位後面加上 /* no */即不會轉化px --- 通常border需用這個
三、在它轉化以前就設置rem,我的推薦該法,利用VScode的px to rem,將寫好的px,直接選中option+z轉爲rem,而後fliexble就在webpack編譯的時候不去轉化它了。
四、在px後面添加/*px*/
,會根據dpr的不一樣,生成三套代碼。---- 通常字體需用這個
這裏推薦 移動端的ui庫:vant-ui,與該適配方案完美結合使用;
vant-ui相比其餘移動端ui庫優點:
1. 60+ 高質量組件,組件豐富
2. 很詳細完整的中英文文檔
3. 支持現代瀏覽器以及 Android 4.0+, iOS 7+
4.在gitHub上已得到11.9K的星,用戶量持續增多
5.源碼由有贊團隊 一直持續維護中。
6.相比其餘移動端Ui庫,組件更豐富齊全,功能傳參方式簡單易懂,文檔齊全,容易上手。
至此,結束。
2、rem適配方法,適合窗口大小可能會改變 以及設計圖小於750,或者大於750設計稿的狀況
該方法,將100px爲1rem,根據設計稿尺寸 縮小100就爲 rem,
例如:font-size:14px,換成rem就爲0.14rem, div{width:10px;}換成rem就是div{width:0.10rem;}
3、rem適配方法,適合移動設備爲固定的某個寬度,以及設計圖爲固定的某個值例如750,或者pad,1920的狀況
該方法,將100px爲1rem,根據設計稿尺寸 縮小100就爲 rem,
例如:font-size:14px,換成rem就爲0.14rem, div{width:10px;}換成rem就是div{width:0.10rem;}
/**
* 移動端自適應,移動端必定要在頭 <head>標籤裏面加入這段標籤,以適應不一樣手機的視口
*/
<head>
</head>
// <!--content-->
// <!--width=device-width 可視區域的寬度,值可爲數字或關鍵詞device-width-->
// <!--height=device-height 可視區域的高度,值可爲數字或關鍵詞device-height-->
// <!--user-scalable=yes/no 是否可對頁面進行縮放,no 禁止縮放-->
// <!--initial-scale=1.0 頁面首次被顯示是可視區域的縮放級別,取值1.0則頁面按實際尺寸顯示,無任何縮放-->
// <!--minimum-scale=1.0 可視區域的縮小級別-->
// <!--maximum-scale=1.0 可視區域的放大級別-->