Vue项目配置 px自动转rem

Vue2项目(vue-cli)

安装指定版本

最新版本@6 会报错:PostCSS plugin postcss-pxtorem requires PostCSS 8

npm i postcss-pxtorem@5.1.1 -D

配置 vue.config.js

module.exports = {
  publicPath: "./",
  productionSourceMap: false, // 生产打包时不输出map文件,加快打包速度
  devServer: {
    disableHostCheck: true,
    // https: true,
  },
  css: {
    loaderOptions: {
      postcss: {
        plugins: [
          require("postcss-pxtorem")({
            // 配置文档:https://www.npmjs.com/package/postcss-pxtorem
            rootValue: 37.5, // 根元素字体大小 16/1.25
            unitPrecision: 5, // 转换成rem后保留的小数点位数
            propList: ["*"], // 匹配CSS中的属性,* 代表启用所有属性
            exclude: /(node_module)/, // 忽略一些文件,不进行转换,默认false,可以(reg)利用正则表达式排除某些文件夹的方法,例如/(node_module)/ 。如果想把前端UI框架内的px也转换成rem,请把此属性设为默认值
            selectorBlackList: [".van"], // 要忽略并保留为 px 的选择器
            mediaQuery: false, //(布尔值)允许在媒体查询中转换px
            minPixelValue: 1, // 设置要替换的最小像素值
          }),
        ],
      },
    },
  },
};

Vue3项目(vite)

1.安装

npm install postcss-pxtorem -D

2. 配置 (vite.config.js)

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import postcsspxtorem from 'postcss-pxtorem'

import path from 'path';

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue()],
  resolve: {
    //文件后缀省略导致页面报错404(例:vue文件引入时,webpack只需要文件名),
    //在vite.config.js配置resolve.extensions中添加对应后缀,vite默认有['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json']。
    extensions: ['.vue', '.mjs', '.js', '.ts', '.jsx', '.tsx', '.json'],
    alias: {
      '@': path.resolve(__dirname, './src'),
      '~styles': path.resolve(__dirname, './src/assets/styles'),
      '~components': path.resolve(__dirname, './src/components'),
    }
  },
  css: {
    postcss: {
      plugins: [
        // 配置文档:https://www.npmjs.com/package/postcss-pxtorem
        postcsspxtorem({
          rootValue: 12.8, //根元素字体大小 16/1.25
          propList: ['*'], // 匹配CSS中的属性,* 代表启用所有属性 
          unitPrecision: 5, // 转换成rem后保留的小数点位数
          minPixelValue: 12, // 小于12px的样式不被替换成rem
          exclude: ['node_modules'], //忽略一些文件,不进行转换,比如我想忽略 依赖的UI框架
          // selectorBlackList: [], // 要忽略并保留为 px 的选择器
          // replace : true, // 替换包含 rems 的规则,而不是添加回退
          // mediaQuery : false, // 允许在媒体查询中转换 px
        })
      ]
    }
  }

})

3.配置 (base.css main.js)

base.css

html {
  font-size: .833333vw;
}
body {
  font-size: 0.16rem;
}

main.js

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import Antd from 'ant-design-vue';
import 'ant-design-vue/dist/antd.css';
import "@/assets/css/base.css"; // 新增

createApp(App).use(router).use(Antd).mount('#app')

posted @ 2022-11-01 15:18  Better-HTQ  阅读(942)  评论(0编辑  收藏  举报