You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js中使用SCSS Mixins时媒体查询失效问题排查

问题排查与解决

1. Next.js配置文件的覆盖问题

你当前的next.config.js存在重复导出的问题,后面的module.exports完全覆盖了前面withSass的配置,导致cssModules: true和withSass的配置未生效。正确写法需要把sassOptions合并到withSass的配置对象中:

const path = require('path')
const withSass = require('@zeit/next-sass');

module.exports = withSass({
    cssModules: true,
    sassOptions: {
        includePaths: [path.join(__dirname, 'styles')]
    },
})

2. SCSS媒体查询变量的语法错误

你的$max-hd和$max-md变量被定义成了带引号的字符串,在媒体查询中使用时,Sass会直接把引号内容作为字符串插入,导致生成的CSS媒体查询语法无效。比如浏览器会收到这种错误格式的代码:

@media screen and ("max-width: (1739px)") { ... }

这种写法不符合CSS规范,会被浏览器直接忽略。

正确的变量定义要去掉引号,直接写媒体条件表达式:

$max-md: max-width (#{$break-md - 1px});
$max-hd: max-width (#{$break-hd - 1px});

或者更简洁的写法:

$max-md: max-width #{break-md - 1px};
$max-hd: max-width #{break-hd - 1px};

这样生成的媒体查询会是标准格式:

@media screen and (max-width: 1739px) { ... }

3. 全局样式与CSS Modules的冲突

你开启了cssModules: true,但直接导入全局SCSS文件时,Next.js会默认按CSS Modules处理,可能导致样式作用域混乱或不生效。

可以通过两种方式解决:

  • 修改导入语句,标记为全局样式:
import '../styles/main.scss';
// 若上述方式无效,可在SCSS文件中用:global包裹全局样式代码
  • 在配置文件中排除全局样式目录,不启用CSS Modules:
module.exports = withSass({
    cssModules: true,
    cssModules: {
        exclude: /styles\/.*\.scss$/
    },
    sassOptions: {
        includePaths: [path.join(__dirname, 'styles')]
    },
})

调试技巧

  • 打开Chrome开发者工具的Sources面板,在webpack://路径下能找到编译后的CSS文件,可查看实际生成的样式是否符合预期。
  • 运行next dev --debug开启调试模式,能看到更多编译过程的日志信息。

内容的提问来源于stack exchange,提问作者Raphael Aleixo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 22:05:22