近些年移動端的強勢崛起,導致移動端適配越來越重要,個人之前一直使用的是rem進行適配,但是發現並不是非常完美,給力的是大漠老師寫了一篇《
如何在Vue項目中使用vw實現移動端適配》,比較完美的解決了適配問題,下面是自己動手搭建后的一些整理。
創建項目
//vue-cli 3.0+ 版本 vue init webpack vue-vw-demo cd vue-vw-demo
安裝必要插件
npm i postcss-aspect-ratio-mini postcss-px-to-viewport postcss-write-svg postcss-cssnext postcss-viewport-units cssnano postcss-import postcss-url --s
配置根目錄下的postcss.config.js
module.exports = { "plugins": { "postcss-import": {}, "postcss-url": {}, "postcss-aspect-ratio-mini": {}, "postcss-write-svg": { utf8: false }, "postcss-cssnext": {}, "postcss-px-to-viewport": { viewportWidth: 750, // 視窗的寬度,對應的是我們設計稿的寬度,一般是750 viewportHeight: 1334, // 視窗的高度,根據750設備的寬度來指定,一般指定1334,也可以不配置 unitPrecision: 3, // 指定`px`轉換為視窗單位值的小數位數(很多時候無法整除) viewportUnit: 'vw', // 指定需要轉換成的視窗單位,建議使用vw selectorBlackList: ['.ignore', '.hairlines'], // 指定不轉換為視窗單位的類,可以自定義,可以無限添加,建議定義一至兩個通用的類名 minPixelValue: 1, // 小於或等於`1px`不轉換為視窗單位,你也可以設置為你想要的值 mediaQuery: false // 允許在媒體查詢中轉換`px` }, "postcss-viewport-units":{}, "cssnano": { preset: "advanced", autoprefixer: false, "postcss-zindex": false } } }
兼容 vw(index.html引入)
//在index.html添加js <script src="//g.alicdn.com/fdilab/lib3rd/viewport-units-buggyfill/0.6.2/??viewport-units-buggyfill.hacks.min.js,viewport-units-buggyfill.min.js"></script> //在index.html中調用viewport-units-buggyfill <script> window.onload = function () { window.viewportUnitsBuggyfill.init({ hacks: window.viewportUnitsBuggyfillHacks }); }
</script>
配置scss
npm install node-sass --save-dev
npm install sass-loader --save-dev
為./build/webpack.base.config.js
添加如下配置
module.exports = { module: { rules: [ ... { test: /\.scss$/, loaders: ["style", "css", "sass"] } ] } }
Tip:組件中使用,記得加上lang='scss'
。
設計稿20px這里寫兩倍(40px)
最后運行cnpm run dev
啟動項目,最后還是推薦看一看大漠老師的原文《如何在Vue項目中使用vw實現移動端適配》,原文寫的很清楚,對各個插件也進行了解釋,相信你看了會有收獲。