1、安装px2rem插件

npm add postcss-px2rem

2、配置

1)在src下的utils目录中新建px2rem.js文件(没有utils就新建一个)

px2rem.js

// 基准大小
const baseSize = 16
// 设置 rem 函数
function setRem() {
  // 当前页面宽度相对于 750 宽的缩放比例,可根据自己需要修改。
  const scale = document.documentElement.clientWidth / 750
  // 设置页面根节点字体大小
  document.documentElement.style.fontSize = baseSize * Math.min(scale, 2) + 'px'
}
// 初始化
setRem()
// 改变窗口大小时重新设置 rem
window.onresize = function() {
  setRem()
}

2)在main.js文件中引入

main.js

import "./utils/px2rem"

3)找到 vue.config.js 文件添加配置

const px2rem = require('postcss-px2rem')
 
const postcss = px2rem({
  remUnit: 16   //基准大小 baseSize,需要和rem.js中相同
})
 
module.exports = {
  css: {
    loaderOptions: {
      postcss: {
        plugins: [
          postcss
        ]
      }
    }
  }
}

因为修改了配置文件,所以重启一下项目就可以了

提示:

  • 行内样式的px不会转换成rem
  • UI库如果要改变样式,在样式的单位要使用rem
  • 不想转换成rem的话将px写成PX

 问题:不同脚手架版本配置方式不同,若启动报错,可检查版本问题

vue项目安装使用postcss-pxtorem,在vue.config.js中进行配置,需要注意vue-cli-service的版本。

如若vue-cli-service的版本为4,可直接在vue.config.js中进行配置。

style-resources-loader作用是可以将css或less样式文件自动引入到vue组件中,无需自己手动引入,需要下载style-resources-loader以及vue-cli-plugin-style-resources-loader,在pluginOptions配置项中进行配置。代码如下:

const path = require('path');
module.exports = {
    chainWebpack: config => {
        config.resolve.alias.set('@src', path.resolve(__dirname, 'src'));
    },
    css: {
        loaderOptions: {
            postcss: {
                plugins: [
                    require('postcss-pxtorem')({
                        rootValue: 14.4, // 换算的基数
                        // 忽略转换正则匹配项。插件会转化所有的样式的px。比如引入了三方UI,也会被转化。目前我使用 selectorBlackList字段,来过滤
                        // 如果个别地方不想转化px。可以简单的使用大写的 PX 或 Px 。
                        // selectorBlackList: [/^\.el/, /^\.am/],
                        selectorBlackList: ['html'],
                        propList: ['*'],
                        exclude: /node_modules/,
                        replace: true,
                        mediaQuery: false,
                        minPixelValue: 0,
                    }),
                ],
            },
        },
    },
    pluginOptions: {
        'style-resources-loader': {
            preProcessor: 'less',
            patterns: [path.resolve(__dirname, 'src/assets/less/mixins.less')],
        },
    },
};

如若vue-cli-service的版本为5

则按以上配置无效,postcss-pxtorem相关配置需要在postcss.config.js中设置,正确配置如下:

vue.config.js

const { defineConfig } = require('@vue/cli-service');
const path = require('path');
module.exports = defineConfig({
    transpileDependencies: true,
    chainWebpack: config => {
        config.resolve.alias.set('@src', path.resolve(__dirname, 'src'));
    },
    pluginOptions: {
        'style-resources-loader': {
            preProcessor: 'less',
            patterns: [path.resolve(__dirname, 'src/assets/less/mixins.less')],
        },
    },
});

 postcss.config.js

module.exports = {
    plugins: {
        'postcss-pxtorem': {
            rootValue: 14.4,
            propList: ['*'],
            selectorBlackList: ['html'],
            exclude: /node_modules/,
            replace: true,
            mediaQuery: false,
            minPixelValue: 0,
        },
    },
};
Logo

前往低代码交流专区

更多推荐