安装 postcss-px-to-viewport

npm install postcss-px-to-viewport —save-dev

配置文件说明 postcss.config.js

  1. module.exports = {
  2. plugins: {
  3. // "postcss-px2rem-exclude": {
  4. // "remUnit": 192,
  5. // "exclude": /node_modules|src/i
  6. // },
  7. "postcss-px-to-viewport": {
  8. unitToConvert: "px", // 需要转换的单位,默认为"px"
  9. viewportWidth: 1920, // 设计稿的视口宽度
  10. unitPrecision: 5, // 单位转换后保留的精度
  11. propList: ["*"], // 能转化为vw的属性列表,可以使用通配符的方式配置,例如['position*']
  12. viewportUnit: "vw", // 希望使用的视口单位
  13. fontViewportUnit: "vw", // 字体使用的视口单位
  14. selectorBlackList: [], // 需要忽略的CSS选择器,不会转为视口单位,使用原有的px等单位,注意如果传入[""]则都不进行转换了
  15. minPixelValue: 1, // 设置最小的转换数值,如果为1的话,只有大于1的值会被转换
  16. mediaQuery: false, // 媒体查询里的单位是否需要转换单位
  17. replace: true, // 是否直接更换属性值,而不添加备用属性
  18. exclude: [/node_modules/], // 忽略某些文件夹下的文件或特定文件,例如 'node_modules' ,如果传入的值是一个数组,那么数组里的值必须为正则
  19. // include: [], // 如果设置了,那将只有匹配到的文件才会被转换,例如只转换 'src/mobile' 下的文件 include: /\/src\/mobile\//
  20. landscape: false, // 是否添加根据 landscapeWidth 生成的媒体查询条件 @media (orientation: landscape)
  21. landscapeUnit: "vw", // 横屏时使用的单位
  22. landscapeWidth: 568, // 横屏时使用的视口宽度
  23. },
  24. },
  25. };

使用PostCss配置文件时

  1. module.exports = {
  2. plugins: {
  3. // ...
  4. 'postcss-px-to-viewport': {
  5. // options
  6. }
  7. }
  8. }

在gulp中使用

package.json

  1. {
  2. "name": "postcss",
  3. "version": "1.0.0",
  4. "description": "",
  5. "main": "index.js",
  6. "scripts": {
  7. "test": "echo \"Error: no test specified\" && exit 1"
  8. },
  9. "author": "",
  10. "license": "ISC",
  11. "dependencies": {},
  12. "devDependencies": {
  13. "gulp": "^4.0.2",
  14. "gulp-postcss": "^9.0.1",
  15. "postcss-px-to-viewport": "^1.1.1"
  16. }
  17. }
  1. var gulp = require('gulp');
  2. var postcss = require('gulp-postcss');
  3. var pxtoviewport = require('postcss-px-to-viewport');
  4. gulp.task("css", (cd) => {
  5. console.log("css")
  6. // 将你的默认的任务代码放在这
  7. var processors = [
  8. pxtoviewport({
  9. unitToConvert: "px",
  10. viewportWidth: 1920,
  11. unitPrecision: 5,
  12. propList: ["*"],
  13. viewportUnit: "vw",
  14. fontViewportUnit: "vw",
  15. selectorBlackList: [], // 写成selectorBlackList: [""] 就所有的都不进行转换了
  16. minPixelValue: 1,
  17. mediaQuery: false,
  18. replace: true,
  19. exclude: [/node_modules/],
  20. landscape: false,
  21. landscapeUnit: "vw",
  22. })
  23. ];
  24. return gulp.src(['./css/**/*.scss'])
  25. .pipe(postcss(processors))
  26. .pipe(gulp.dest('build/css'));
  27. })
  28. gulp.task("auto", (cd) => {
  29. console.log("auto");
  30. cd();
  31. })
  32. gulp.task('default', gulp.series('css', 'auto', (done) => {
  33. console.log("success");
  34. done();
  35. }));

利用注释阻止转化

  1. /* px-to-viewport-ignore-next */ 在单独的行上,防止在下一行上转换。
  2. /* px-to-viewport-ignore */ 在右侧的属性之后,阻止在同一行上进行转换。
  3. /* example input: */
  4. .class {
  5. /* px-to-viewport-ignore-next */
  6. width: 10px;
  7. padding: 10px;
  8. height: 10px; /* px-to-viewport-ignore */
  9. border: solid 2px #000; /* px-to-viewport-ignore */
  10. }
  11. /* example output: */
  12. .class {
  13. width: 10px;
  14. padding: 3.125vw;
  15. height: 10px;
  16. border: solid 2px #000;
  17. }