PostCSS 处理媒体查询时样式没生效是怎么回事?
我在用 PostCSS 的 autoprefixer 和 nested 插件,写了个响应式组件,但媒体查询里的样式完全没起作用,控制台也没报错,本地开发环境和构建后都一样。
我试过把媒体查询提到最外层、检查了 CSS 优先级,也确认了 PostCSS 配置里启用了相关插件,还是不行。是不是写法有问题?
const Banner = () => {
return (
<div className="banner">
<h1>欢迎</h1>
</div>
);
};
对应的 CSS 是这样写的(通过 css-modules 引入):
.banner {
background: blue;
@media (max-width: 768px) {
background: red;
}
}
首先,确保你的 PostCSS 配置文件(通常是 postcss.config.js 或类似的文件)里正确地引入了 autoprefixer 和 nested 插件,并且顺序是对的。nested 插件通常需要在 autoprefixer 之前。
其次,检查一下你的 CSS Modules 是否正确应用了。有时候 CSS Modules 生成的类名可能和你在代码里写的不一样,导致样式不生效。可以在浏览器开发者工具里检查一下实际应用的类名是否正确。
最后,尝试一下把媒体查询的写法稍微调整一下,有时候这种嵌套写法在某些配置下可能会有问题。可以试试改成非嵌套的形式:
这样写的话,确保媒体查询里的选择器和外部的选择器是一致的。
一般这样处理应该能解决大部分媒体查询不生效的问题。如果还不行,可能就需要检查一下项目的其他配置了,比如 webpack 或其他构建工具的配置。