安装 postcss-px-to-viewport
npm install postcss-px-to-viewport —save-dev
配置文件说明 postcss.config.js
module.exports = {plugins: {// "postcss-px2rem-exclude": {// "remUnit": 192,// "exclude": /node_modules|src/i// },"postcss-px-to-viewport": {unitToConvert: "px", // 需要转换的单位,默认为"px"viewportWidth: 1920, // 设计稿的视口宽度unitPrecision: 5, // 单位转换后保留的精度propList: ["*"], // 能转化为vw的属性列表,可以使用通配符的方式配置,例如['position*']viewportUnit: "vw", // 希望使用的视口单位fontViewportUnit: "vw", // 字体使用的视口单位selectorBlackList: [], // 需要忽略的CSS选择器,不会转为视口单位,使用原有的px等单位,注意如果传入[""]则都不进行转换了minPixelValue: 1, // 设置最小的转换数值,如果为1的话,只有大于1的值会被转换mediaQuery: false, // 媒体查询里的单位是否需要转换单位replace: true, // 是否直接更换属性值,而不添加备用属性exclude: [/node_modules/], // 忽略某些文件夹下的文件或特定文件,例如 'node_modules' ,如果传入的值是一个数组,那么数组里的值必须为正则// include: [], // 如果设置了,那将只有匹配到的文件才会被转换,例如只转换 'src/mobile' 下的文件 include: /\/src\/mobile\//landscape: false, // 是否添加根据 landscapeWidth 生成的媒体查询条件 @media (orientation: landscape)landscapeUnit: "vw", // 横屏时使用的单位landscapeWidth: 568, // 横屏时使用的视口宽度},},};
使用PostCss配置文件时
module.exports = {plugins: {// ...'postcss-px-to-viewport': {// options}}}
在gulp中使用
package.json
{"name": "postcss","version": "1.0.0","description": "","main": "index.js","scripts": {"test": "echo \"Error: no test specified\" && exit 1"},"author": "","license": "ISC","dependencies": {},"devDependencies": {"gulp": "^4.0.2","gulp-postcss": "^9.0.1","postcss-px-to-viewport": "^1.1.1"}}
var gulp = require('gulp');var postcss = require('gulp-postcss');var pxtoviewport = require('postcss-px-to-viewport');gulp.task("css", (cd) => {console.log("css")// 将你的默认的任务代码放在这var processors = [pxtoviewport({unitToConvert: "px",viewportWidth: 1920,unitPrecision: 5,propList: ["*"],viewportUnit: "vw",fontViewportUnit: "vw",selectorBlackList: [], // 写成selectorBlackList: [""] 就所有的都不进行转换了minPixelValue: 1,mediaQuery: false,replace: true,exclude: [/node_modules/],landscape: false,landscapeUnit: "vw",})];return gulp.src(['./css/**/*.scss']).pipe(postcss(processors)).pipe(gulp.dest('build/css'));})gulp.task("auto", (cd) => {console.log("auto");cd();})gulp.task('default', gulp.series('css', 'auto', (done) => {console.log("success");done();}));
利用注释阻止转化
● /* px-to-viewport-ignore-next */ — 在单独的行上,防止在下一行上转换。● /* px-to-viewport-ignore */ — 在右侧的属性之后,阻止在同一行上进行转换。/* example input: */.class {/* px-to-viewport-ignore-next */width: 10px;padding: 10px;height: 10px; /* px-to-viewport-ignore */border: solid 2px #000; /* px-to-viewport-ignore */}/* example output: */.class {width: 10px;padding: 3.125vw;height: 10px;border: solid 2px #000;}
