在编写 CSS 时,calc(100% - 20px) 是常见的写法,但一旦用到 Less 预处理器,就容易遇到 Variable @20px is undefined 的编译错误。这不是书写有误,而是 Less 解析器在尝试自动计算数学表达式时,与 CSS 原生 calc() 函数产生了冲突。 问
在编写 CSS 时,calc(100% - 20px) 是常见的写法,但一旦用到 Less 预处理器,就容易遇到 Variable @20px is undefined 的编译错误。这不是书写有误,而是 Less 解析器在尝试自动计算数学表达式时,与 CSS 原生 calc() 函数产生了冲突。

长期稳定更新的攒劲资源: >>>点此立即查看<<<
问题的本质在于:Less 默认会将 calc() 内部的括号视为自身语法的一部分,从而提前求值或报错,导致最终输出的 CSS 不正确。下面逐一分析常见错误场景和三种可靠的解决方案。
calc() 内的括号?Less 遇到形如 calc(100% - 20px) 的表达式时,会尝试将其中的 100% - 20px 当作减法运算处理。然而 CSS 的 calc() 需要原样保留在样式表中,不应被 Less 展开或求值。常见的编译错误有三种:
Variable @20px is undefined(Less 将 - 20px 误认为变量引用)calc(80%)(Less 错误地提前计算)calc(100% - 20px(缺少右括号)calc() 表达式这是最简便且兼容性最好的方案:通过引号告诉 Less “当作字符串处理”,从而避免解析内部结构。
操作要点:
width: "calc(100% - 20px)";calc(...),不能只包参数width: calc(100% - 20px);,无多余空格或转义符~"" 显式禁用解析Less 提供的“转义字符串”语法 ~"..." 比普通引号更明确地表示“原样输出”,尤其适合需要嵌入变量的场景。
操作要点:
width: ~"calc(100% - 20px)";@gap: 20px; width: ~"calc(100% - @{gap})";~"calc(100% - " @gap ")",这种字符串拼接会导致语法错误~"" 后仍报错,检查是否漏掉波浪线或引号不匹配calc() 内部直接拼接 Less 变量常见错误写法:width: calc(100% - @gap);。这种写法看似简洁,但 Less 会尝试计算 100% - @gap,而混合单位(百分比与像素)并非合法的 Less 运算,必然失败。
正确做法仅有两种:
width: ~"calc(100% - @{gap})";@calc-width: ~"calc(100% - 20px)"; width: @calc-width;calc()——它不具备此功能,将来也不会支持.less 源文件中解决一个容易被忽略的陷阱是:即使只在某一行中使用了 calc(),只要没有加引号或 ~"",Less 都可能在嵌套层级或 mixin 展开时悄悄拆解括号。错误不一定立即显现,但上线后布局就可能出现偏差。问题虽小,影响却直接。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述