PostCSS 处理媒体查询时为啥没生效?
我用 PostCSS 的 autoprefixer 和 postcss-preset-env,想让媒体查询里的特性自动加前缀或者降级,但写完发现完全没变化。比如下面这段代码:
@media (min-width: 768px) and (hover: hover) {
.btn {
background: blue;
}
}
我已经在 postcss.config.js 里启用了 preset-env,也设了 browserslist,但 (hover: hover) 这种查询还是原样输出,没被处理成兼容写法。是我漏了什么插件还是配置不对?
(hover: hover)这样的,autoprefixer 并不会自动添加前缀,因为这些特性本身在大多数现代浏览器中已经得到了支持,或者它们不属于需要加前缀的范畴。不过,postcss-preset-env 是一个非常强大的工具,它可以帮助我们把一些未来的 CSS 特性转换为当前浏览器可以理解的代码。但要实现你想要的效果,还需要额外的插件来处理媒体查询中的特性。
首先你要确保安装了
postcss-media-minmax和postcss-media-variables等插件,这些插件可以帮助你处理一些复杂的媒体查询和特性。接下来,你需要在你的
postcss.config.js文件中进行一些调整。你可以按照下面的步骤来配置:首先你要安装这些插件:
然后,在你的
postcss.config.js文件中,你需要这样配置:这里的关键在于
stage设置为 1,这意味着你将启用所有处于 stage 1 阶段的 CSS 特性,其中包括(hover: hover)。如果你只想启用特定的特性而不启用 stage 1 中的所有特性,你可以使用features选项来精细控制。最后,确保你的项目中有
browserslist配置,这样postcss-preset-env就知道你需要支持哪些浏览器了。你可以在项目的根目录下创建一个.browserslistrc文件,或者在package.json中添加browserslist字段。例如:这样配置之后,重新构建你的项目,看看媒体查询中的
(hover: hover)是否被正确处理了。如果仍然有问题,可能需要检查一下你的构建工具(比如 Webpack 或 Gulp)是否正确加载了 PostCSS 配置。有时候工具的配置问题也会导致 PostCSS 插件没有按预期工作。希望这些步骤能帮到你,解决这个问题。