【前端適配】vw單位移動端適配方案


近些年移動端的強勢崛起,導致移動端適配越來越重要,個人之前一直使用的是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實現移動端適配》,原文寫的很清楚,對各個插件也進行了解釋,相信你看了會有收獲。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM