vue项目将px转成其他单位,如rem、cqw,postcss-pxtorem的使用

安装插件
在这里插入图片描述
新建配置文件.postcssrc.js

// module.exports = {
//     "plugins": {
//       "postcss-pxtorem": {
//         rootValue: 1,//必须和rem的初始值一致
//         propList: ['*'],
//         // selectorBlackList: [
//         //   'ant'
//         // ]
//       }
//     }
//   }
const postcssPx2ViewportConfig = {
  unitToConvert: 'px', // 需要转换的单位,默认为"px"
  viewportWidth: 1920, // 设计稿的视口宽度
  unitPrecision: 5, // 单位转换后保留的精度
  propList: ['*', '!letter-spacing'], // 能转化为vw的属性列表
  viewportUnit: 'cqw', // 希望使用的视口单位
  fontViewportUnit: 'cqw', // 字体使用的视口单位
  selectorBlackList: [], // 需要忽略的CSS选择器,不会转为视口单位,使用原有的px等单位。
  minPixelValue: 4, // 设置最小的转换数值,如果为1的话,只有大于1的值会被转换
  mediaQuery: false, // 媒体查询里的单位是否需要转换单位
  replace: true, //  是否直接更换属性值,而不添加备用属性
  exclude: [], // 忽略某些文件夹下的文件或特定文件,例如 'node_modules' 下的文件
  include: [], // 如果设置了include,那将只有匹配到的文件才会被转换
  landscape: false, // 是否添加根据 landscapeWidth 生成的媒体查询条件 @media (orientation: landscape)
  landscapeUnit: 'vw', // 横屏时使用的单位
  landscapeWidth: 1920 // 横屏时使用的视口宽度
};

module.exports = {
  plugins: [
    require('postcss-preset-env'),
    require('postcss-px-to-viewport-8-plugin')(postcssPx2ViewportConfig),
  ]
}

转成cqw可以有效避免浏览器缩放导致页面布局错乱的问题,该配置对行内样式无效

注意:postcss-px-to-viewport 的用途:这个插件主要是将 px 转换为视口单位(vw/vh),而不是专门用于 rem 转换的。

如果想将px转为rem,可以单纯的使用postcss-pxtorem
1、安装好postcss-pxtorem
2、在根目录下新建文件postcss.config.js

// postcss.config.js
module.exports = {
  plugins: {
    'autoprefixer': {}, // 可选,自动补全浏览器前缀,用它时需要先额外安装autoprefixer依赖
    'postcss-pxtorem': {
      rootValue: 16, // 1rem = 16px(根据设计稿调整)
      propList: ['*'], // 对所有属性转换
      minPixelValue: 1, // 最小转换像素值
      exclude: /node_modules/i // 排除 node_modules
    }
  }
}

3、动态设置根字体大小
在 src/utils/ 下创建 rem.js,动态计算 html 的 font-size

// src/utils/rem.js
function setRem() {
  const baseSize = 16; // 基准大小(与 rootValue 一致)
  const scale = document.documentElement.clientWidth / 1920; // 按设计稿宽度(如 1920px)缩放
  document.documentElement.style.fontSize = baseSize * Math.min(scale, 2) + 'px'; // 限制最大缩放
}

// 初始化
setRem();
// 窗口变化时重置
window.addEventListener('resize', setRem);

4、在main.js中引入

// main.js
import '@/utils/rem.js';
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值