为什么PostCSS处理@custom-media时报Unknown word错误?

皇甫欣炅 阅读 38

我在用PostCSS处理CSS时遇到问题,当写@custom-media和CSS变量时,编译总报Unknown word错误。已经装了postcss-preset-env和autoprefixer。

配置文件是这样写的:


module.exports = {
  plugins: {
    'postcss-preset-env': {},
    autoprefixer: {}
  }
};

尝试过把@custom-media改成@media就正常了,但项目需要动态媒体查询。查了文档说是需要特定插件,但按网上的教程配了还是不行。

我来解答 赞 3 收藏
二维码
手机扫码查看
1 条解答
司徒燕伟
你这个报错是因为 PostCSS 没有正确识别 @custom-media 语法,虽然你用了 postcss-preset-env,但它默认的 stage 配置可能没开到支持实验性语法。

@custom-media 属于比较新的 CSS 规范,需要明确启用。postcss-preset-env 默认只处理 stage 2+ 的特性,而 custom media 查询在早期是 stage 3,但实际使用时经常因为 parser 解析不到直接报 “Unknown word”。

解决方法很简单:修改配置,显式开启 features 或调整 stage

改成这样:

module.exports = {
plugins: {
'postcss-preset-env': {
stage: 3,
features: {
'custom-media-queries': true
}
},
autoprefixer: {}
}
};


重点是加上 features: { 'custom-media-queries': true },这样强制启用 custom media 支持。有时候光靠 stage 3 也不保险,插件层面得打个补丁。

另外确认一下你用的 postcss-preset-env 版本,老版本(比如 6.x 以下)对 custom-media 支持不完整,建议升级到最新版:

npm install postcss-preset-env@latest --save-dev


顺便提一句,这类问题服务端构建流程最容易踩坑,本地开发能跑不代表 CI 能过,版本一乱就炸。建议锁版本 + 提前在 pipeline 验证。
点赞 2
2026-02-12 14:16