LibSass因词法解析器设计缺陷无法识别现代CSS语法,错误发生在编译最前端:calc()中的/被误判为除法运算符导致崩溃;@container、color-mix()等新特性无对应token而报Unknown at rule;@use和math.div()等模块语法完全不支持,容错性归零。

LibSass 被废弃后根本无法编译现代 CSS 特性,不是“兼容性差”,而是词法解析器压根不认识这些语法——错误发生在编译最前端,连进入逻辑处理的机会都没有。
calc() 里的 / 直接让 LibSass 崩溃
LibSass 把所有 / 都当 Sass 除法运算符,不管它出现在 calc()、min() 还是普通 CSS 函数里:
-
width: calc(100% / 3);→ 报错SassError: Invalid CSS after "100%": expected expression - 加
// sass:disable-next-line没用:注释处理器根本没机会运行,错误卡在词法层 - 哪怕只写一个合法的原生 CSS 表达式,它也会当成 Sass 语法去解析
@container、color-mix() 等新特性被直接拒收
这些是 W3C Candidate Recommendation 阶段的正式语法,LibSass 的 AST 解析器没有对应 token 类型:
-
@container (min-width: 400px) { }→Unknown at rule "@container" -
background: color-mix(in srgb, red, blue);→Invalid CSS after "color-mix": expected expression - 不支持
@layer、@scope、hwb()、相对颜色函数等 2022 年后推进的标准
@use 和 math.div() 不是升级项,而是语法硬门槛
LibSass 完全不识别模块系统,遇到就中断:
立即学习“前端免费学习笔记(深入)”;
-
@use "sass:math";→Invalid CSS after "@use": expected selector - 也不支持
math.div($a, $b),更不会警告你旧写法$a / $b在calc()外已弃用 - 这意味着:只要项目用了任何现代 Sass 模块或依赖了新版设计系统(如 Material 3),LibSass 就无法加载
真正难处理的不是语法本身,而是 LibSass 的“宽容”掩盖了大量非法写法——Dart Sass 的报错不是变严格了,是终于开始按 CSS 规范校验输入。一旦你写了 calc(100% / 3) 或 @container,容错性归零,没得绕。


















