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

SCSS中@media查询无法识别:root定义的断点变量,阴影变量可正常使用

问题原因

你遇到的问题核心是原生CSS自定义属性(即var()调用的变量)目前不支持在@media的查询条件中使用,这是CSS规范当前的限制:

  • 浏览器解析页面时,会先判断媒体查询条件,再加载匹配的样式规则,而CSS自定义属性的解析是在样式规则加载阶段才会处理,二者的解析顺序决定了媒体查询条件无法读取到CSS变量值
  • 普通样式属性(比如box-shadow)的解析在CSS变量解析之后,所以可以正常调用var(--shadow-box)
解决方案

方案1:使用SCSS预编译变量存储断点(兼容性最好,推荐)

你可以把断点定义为SCSS变量,SCSS在编译阶段就会把变量替换为对应的实际值,不存在运行时解析的问题:

  1. 新建SCSS变量文件(比如variables.scss),定义断点变量:
$max-width-phone: 37.5em;
$max-width-tab-port: 56.25em;
$max-width-phone-tab-land: 75em;
$max-width-desktop: 112em;

// 阴影变量也可以同步定义为SCSS变量,或者继续保留原生CSS变量不影响使用
$shadow-box: 1.6px 4.9px 4.9px -18px rgba(0, 0, 0, 0.096),
  3.8px 11.4px 11.4px -18px rgba(0, 0, 0, 0.138),
  6.9px 20.5px 20.4px -18px rgba(0, 0, 0, 0.17),
  11.4px 34px 33.9px -18px rgba(0, 0, 0, 0.2),
  18.8px 56.1px 55.8px -18px rgba(0, 0, 0, 0.232),
  32.8px 98px 97.6px -18px rgba(0, 0, 0, 0.274),
  71px 212px 211px -18px rgba(0, 0, 0, 0.37);
  1. 在需要使用的SCSS文件中引入变量文件,直接调用即可:
// 开头引入变量文件,路径根据你的项目结构调整
@import './variables.scss';

.container{
    max-width: 120rem;
    margin: 8rem auto;
    background-color: var(--colour-white);

    box-shadow: var(--shadow-box);
    min-height: 95vh;
    font-size: 4rem;

    @media (max-width: $max-width-phone) {
        font-size: 50%;
    }
};

方案2:使用CSS Media Queries Level 5规范写法(仅兼容高版本浏览器)

如果你的项目只需要适配Chrome 104+、Safari 16.4+等极高版本浏览器,可以直接在媒体查询中使用原生CSS变量,但该方案兼容性覆盖范围不足,不推荐生产环境使用。

内容的提问来源于stack exchange,提问作者Bhavya Sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:15:02