方案一:
1. 下載依賴
npm install postcss-import postcss-loader postcss-px-to-viewport --save-dev
npm install postcss-px-to-viewport-opt
2. 根目錄下新建postcss.config.js,配置以下
// https://github.com/michael-ciniawsky/postcss-load-config
// module.exports = {
// 'plugins': {
// // to edit target browsers: use "browserslist" field in package.json
// 'autoprefixer': {}
// }
// }
module.exports = {
plugins: {
'autoprefixer': {
path: ['./src/*']
},
'postcss-import': {},
'postcss-px-to-viewport-opt': {
'viewportWidth': '1920', // 視窗的寬度,對應的是咱們設計稿的寬度
'viewportHeight': '1080', // 視窗的高度
'unitPrecision': 4, // 指定`px`轉換爲視窗單位值的小數位數(不少時候沒法整除)
'viewportUnit': 'vw', // 指定須要轉換成的視窗單位,建議使用vw
'selectorBlackList': ['#nprogress'], // 指定不轉換爲視窗單位的類
'minPixelValue': 1, // 小於或等於`1px`不轉換爲視窗單位
'mediaQuery': false, // 容許在媒體查詢中轉換`px`
'exclude': /(\/|\\)(node_modules)(\/|\\)/,
'include': ['src/views/webgl/DashBoard.vue']
}
}
};
附: 網上找的其餘的配置,能夠參考裏邊的忽略文件寫法,不得不誇一下,掘金的複製粘貼功能很好用
//postcss.config.js文件
module.exports = {
plugins: {
'postcss-px-to-viewport': {
unitToConvert: 'px', //須要轉換的單位,默認爲"px"
viewportWidth: 375, // 視窗的寬度,對應的是咱們設計稿的寬度
viewportHeight: 1334,//視窗的高度,根據375設備的寬度來指定,通常指定667,也能夠不配置
unitPrecision: 13, // 指定`px`轉換爲視窗單位值的小數位數(不少時候沒法整除)
propList: ['*'], // 能轉化爲vw的屬性列表
viewportUnit: 'vw', // 指定須要轉換成的視窗單位,建議使用vw
fontViewportUnit: 'vw', //字體使用的視口單位
selectorBlackList: ['.ignore-', '.hairlines'], //指定不轉換爲視窗單位的類,能夠自定義,能夠無限添加,建議定義一至兩個通用的類名
minPixelValue: 1, // 小於或等於`1px`不轉換爲視窗單位,你也能夠設置爲你想要的值
mediaQuery: false, // 容許在媒體查詢中轉換`px`
replace: true, //是否直接更換屬性值,而不添加備用屬性
exclude: [
/RightBar/,
/gotop.vue/,
], //忽略某些文件夾下的文件或特定文件,例如 'node_modules' 下的文件
landscape: false, //是否添加根據 landscapeWidth 生成的媒體查詢條件 @media (orientation: landscape)
landscapeUnit: 'vw', //橫屏時使用的單位
landscapeWidth: 1134 //橫屏時使用的視口寬度
}
}
}
3.首先聲明個人vue-cli中package-lock.json寫的webpack版本是4.28.4,看一下package.json,通常安裝報錯Error: true is not a PostCSS plugin時候,能夠加這個到package.json裏解決
"peerDependencies": {
"postcss": "^8.0.0"
},
方案二:
1.安裝
npm i postcss-px-to-viewport -D
2. vue.config.js中配置postcss節點,優先級最高
const pxtovw = require('postcss-px-to-viewport');
module.exports={
css:{
loaderOptions:{
sass:{
//給sass-loader傳遞選項
},
css:{
//給css-loader傳遞選項
},
postcss:{
//給postcss-loader傳遞選項
plugins:[
new pxtovw({
unitToConvert: 'px', //須要轉換的單位,默認爲"px";
viewportWidth: 375, //設計稿的視口寬度
unitPrecision: 5, //單位轉換後保留的小數位數
propList: ['*'], //要進行轉換的屬性列表,*表示匹配全部,!表示不轉換
viewportUnit: 'vw', //轉換後的視口單位
fontViewportUnit: 'vw', //轉換後字體使用的視口單位
selectorBlackList: [], //不進行轉換的css選擇器,繼續使用原有單位
minPixelValue: 1, //設置最小的轉換數值
mediaQuery: false, //設置媒體查詢裏的單位是否須要轉換單位
replace: true, //是否直接更換屬性值,而不添加備用屬性
exclude: [/node_modules/] //忽略某些文件夾下的文件
})
]
}
}
}
}
注意
package.json文件中postcss節點的配置,優先級中
postcss.config.js外置配置文件,優先級最低