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

LESS中如何在媒体查询字符串中使用变量执行运算?

嘿,我明白你的问题了——想在LESS里用变量存屏幕分辨率,还得在媒体查询里结合运算对吧?之前直接在字符串里引用变量没生效,其实是没用到LESS正确的插值语法,我来给你讲清楚怎么弄:


1. 直接在媒体查询中使用变量+运算(最常用)

如果你不需要把整个媒体查询条件存成变量,直接在@media里用变量和运算就可以,LESS会自动帮你计算结果:

// 定义基础断点变量
@screen-sm: 768px;
@screen-md: 992px;

// 直接在媒体查询里做运算
@media screen and (min-width: @screen-sm) and (max-width: @screen-md - 1px) {
  .container {
    width: 80%;
    margin: 0 auto;
  }
}

编译后的CSS会自动把@screen-md -1px计算成991px,生成:

@media screen and (min-width: 768px) and (max-width: 991px) {
  .container {
    width: 80%;
    margin: 0 auto;
  }
}

2. 把媒体查询条件存成变量(适合复用复杂条件)

如果你想把整个媒体查询语句存成@myStatement这样的变量,就需要用到插值语法@{变量名}加上转义字符~,让LESS正确解析变量和运算:

// 定义变量并提前计算好运算结果(或者在插值里计算)
@screen-lg: 1200px;
@screen-lg-max: @screen-lg - 1px; // 提前运算,更清晰

// 用转义字符串+插值定义媒体查询变量
@myStatement: ~"screen and (max-width: @{screen-lg-max})";

// 使用这个变量
@media @myStatement {
  .content {
    padding: 0 20px;
  }
}

这里的~是告诉LESS:把这个字符串当作有效的CSS表达式处理,而不是普通字符串;@{screen-lg-max}则是把变量的值插入到字符串中,替换掉占位符。

如果想直接在字符串里做运算,也可以这么写(不过提前定义运算后的变量可读性更好):

@screen-xl: 1400px;
@myStatement: ~"screen and (min-width: @{screen-xl} + 1px)";

@media @myStatement {
  .sidebar {
    display: none;
  }
}

编译后会生成@media screen and (min-width: 1401px) { ... }


为什么你之前的写法无效?

大概率是你直接把变量写在普通字符串里,比如@myStatement: "screen and (max-width: @screen-sm)";——这种情况下LESS会把@screen-sm当作字符串的一部分,不会解析成变量的值。必须用@{变量名}来插值,再配合~转义,才能让LESS正确识别变量和运算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:19:32