什么是vw(Viewport Width)和vh(Viewport Height)?
vw和vh是前端開發中的一個動態單位,是一個相對於網頁視口的單位。
系統會將視口的寬度和高度分為100份,1vw占用視口寬度的百分之一,1vh占用視口高度的百分之一。
vw、vh和百分比不同的是,百分比永遠都是以父元素為參考,而vw、vh是以視口作為參考。
結論:vw、vh是一個動態的單位,會隨着視口的變化而變化(相對單位)。
我個人在做Vue項目的時候,一邊想用vw、vh進行布局,一邊又覺得px布局方便,因為藍湖上邊的切圖是直接有視圖的px大小。
所以就想如果有一個方案可以解決px轉換為vw vh就太好不過了,我這邊是直接在.postcssrc.js里邊進行配置,下邊是我的代碼,大家可以參考一下,有問題請指出問題
1. npm i postcss-px-to-viewport -D
2. 在項目根目錄下添加.postcssrc.js文件
3. 添加如下配置:
1 const path = require('path'); 2 3 module.exports = ({ file }) => { 4 const designWidth = file.dirname.includes(path.join('node_modules', 'vant')) ? 375 : 750; 5 6 return { 7 plugins: { 8 autoprefixer: {}, 9 "postcss-px-to-viewport": { 10 unitToConvert: "px", // 要轉化的單位 11 viewportWidth: designWidth, // UI設計稿的寬度 12 unitPrecision: 6, // 轉換后的精度,即小數點位數 13 propList: ["*"], // 指定轉換的css屬性的單位,*代表全部css屬性的單位都進行轉換 14 viewportUnit: "vw", // 指定需要轉換成的視窗單位,默認vw 15 fontViewportUnit: "vw", // 指定字體需要轉換成的視窗單位,默認vw 16 selectorBlackList: ["wrap"], // 指定不轉換為視窗單位的類名, 17 minPixelValue: 1, // 默認值1,小於或等於1px則不進行轉換 18 mediaQuery: true, // 是否在媒體查詢的css代碼中也進行轉換,默認false 19 replace: true, // 是否轉換后直接更換屬性值 20 exclude: [/node_modules/], // 設置忽略文件,用正則做目錄名匹配 21 landscape: false // 是否處理橫屏情況 22 } 23 } 24 } 25 26 }
添加完配置之后需要重新運行
這個方案可以在我的Vue項目中直接把px單位轉換為vw、vh