1.項目根目錄下,建立 .postcssrc.js 文件。javascript
2.安裝插件。css
-D (開發依賴)html
postcss-importvue
postcss-urljava
cssnano-preset-advancednpm
-S (開發、運行都依賴)svg
postcss-aspect-ratio-minipost
postcss-px-to-viewport
postcss-write-svg
postcss-cssnext
cssnano
postcss-viewport-units學習
3.配置 .postcssrc.jsui
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 }, } }
4. 根組件 App.vue 的style 中,加入如下樣式:( 統一的寬度比默認屬性 )
[aspectratio] { position: relative; } [aspectratio]::before { content: ''; display: block; width: 1px; margin-left: -1px; height: 0; } [aspectratio-content] { position: absolute; top: 0; left: 0; right: 0; bottom: 0; width: 100%; height: 100%; } /*vm兼容處理使用Viewport Units Buggyfill形成的反作用,須要以下設置img*/ img { content: normal !important; }
好比:想要一個 750:250 的比例容器,html中的代碼:
<div class="banner" w-750-250 aspectratio aspect-ratio="750/250"> <div aspectratio-content> <img src="" alt="" width="100%" height="100%"> </div> </div>
它對應的css樣式:
[w-750-250] { width: 750px; } [w-750-250]{ aspect-ratio:'750:250'; }
5.vw的兼容處理 (有些手機不支持vw單位 )
5.1 Vue項目的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>
5.2 在html底部調用 viewport-units-buggyfill
<script> window.onload = function () { window.viewportUnitsBuggyfill.init({ hacks: window.viewportUnitsBuggyfillHacks }); </script>
6.本身沒用第5點的方式使用 viewport-units-buggyfill,而是使用了 npm 安裝的方式引入。
6.1 npm install viewport-units-buggyfill -S
6.2 項目的入口文件中(好比 main.js),引入:
var hacks = require('viewport-units-buggyfill.hacks'); require('viewport-units-buggyfill').init({ hacks: hacks });
注:詳細的配置說明,能夠閱讀 https://www.w3cplus.com/mobile/vw-layout-in-vue.html 這一篇好文。
本文只是學習並實踐後的總結。插件不是都必須安裝,可根據實際項目須要,自行決定。