postcss-pxtorem仅处理构建阶段的css文件,无法转换html行内样式(如style="...")和js对象样式(如style={{}}),需手动rem化;echarts等第三方库的px配置也须运行时正则替换或类型判断处理。

postcss-pxtorem根本看不到行内样式
它只处理构建阶段的 CSS 文件(.css、.scss、.less 等),而 style="width: 100px" 是 HTML 字符串,style={{ width: '100px' }} 是 JS 对象 —— 这两类都不经过 PostCSS 流程,插件连源码都读不到,自然不会转换。
React/Vue 中的行内样式必须手动 rem 化
动态生成的样式只能靠运行时计算。常见做法是封装一个单位转换函数,在 JSX 或模板中调用:
- 定义
px2rem(px, base = 37.5):返回`${px / base}rem` - 在 React 中写成
style={{ width: px2rem(100) }} - 在 Vue 模板中用
:style="{ width: px2rem(100) }" - 注意:
base值必须和postcss-pxtorem的rootValue严格一致(如37.5)
第三方库(如 ECharts)的 px 配置也得手动处理
ECharts 的 option 里大量使用 14px 这类字符串值,它们和行内样式一样,完全绕过 PostCSS。不能指望插件自动生效。
- 推荐方案:用
document.documentElement.style.fontSize当前值反推缩放比,再对所有数字型尺寸做乘除运算 - 更稳妥的做法:在初始化前遍历
option,用正则匹配/(\d+)px/g,替换为对应 rem 值(需注意字符串上下文,避免误替换) - 警惕
fontSize: '14px'和textStyle: { fontSize: 14 }这类混合写法,后者是数字,需单独判断类型
别指望 selectorBlackList 或 exclude 能管住行内样式
这两个配置项只作用于 CSS 选择器或文件路径,对 HTML 属性或 JS 对象毫无约束力。把 selectorBlackList: ['.ignore'] 加进去,对 <div style="..."> 一点影响都没有。
<p>真正容易被忽略的是:很多开发者以为“配好了插件就一劳永逸”,结果在组件里随手写个 <code>style={{ top: '20px' }},上线后发现大屏设备上位置偏移严重 —— 因为这个 20px 始终是固定像素,没参与任何响应式缩放。











