PostCSS 的 postcss-variables 插件为啥不生效?
我用 Vue 3 + Vite 搭的项目,想用 postcss-variables 插件把 CSS 自定义变量转成静态值,但编译后还是原样输出,根本没替换。是不是配置哪里错了?
我的组件代码是这样的:
<template>
<div class="box">测试</div>
</template>
<style scoped>
:root {
--color-primary: #3498db;
}
.box {
color: var(--color-primary);
}
</style>
postcss.config.js 里也加了 require(‘postcss-variables’),但生成的 CSS 里还是 color: var(--color-primary),没变成实际颜色值。这插件现在是不是不维护了?还是我漏了什么步骤?
里面。scoped 会给选择器加上属性选择器,
:root变成了:root[data-v-xxxx],这玩意儿根本不是真正的根元素,postcss-variables 解析的时候找不到变量定义,自然就没法替换。正确写法应该是把变量定义放到非 scoped 的 style 标签里,或者单独抽一个全局样式文件:
这样更清晰,变量定义在全局,使用在局部,postcss-variables 才能正确识别并替换。
另外说一句,postcss-variables 这插件确实有点年头了,如果你只是想在构建时把变量转成静态值,其实可以考虑用 postcss-custom-properties,它是 postcss-preset-env 的一部分,维护得更活跃,配置也更简单:
不过无论用哪个插件,变量定义一定要放在能被正确解析的地方,scoped 里定义
:root本身就是个逻辑矛盾。