重大变更:严格函数单位

各种内置函数将在允许的单位方面变得更加严格,并且将更一致地处理这些单位。这使得 Sass 与 CSS 规范更加兼容,并有助于更快地捕获错误。

色相色相永久链接

兼容性
Dart Sass
自 1.32.0 起
LibSass
Ruby Sass

在指定颜色的色相时,CSS 允许任何角度单位(deggradradturn)。它还允许无单位数字,其解释为 deg。从历史上看,Sass 允许任何单位,并将其解释为 deg。这尤其成问题,因为它意味着有效的 CSS 表达式 hsl(0.5turn, 100%, 50%) 将被 Sass 允许,但会被完全错误地解释。

为了解决此问题并使 Sass 与 CSS 规范保持一致,我们正在分多个阶段进行更改

阶段 1阶段 1 永久链接

兼容性
Dart Sass
自 1.32.0 起
LibSass
Ruby Sass

首先,如果您将带单位(除了 deg)的数字作为色相传递给任何函数,Sass 仅发出弃用警告。仍然允许传递无单位数字。

阶段 2阶段 2 永久链接

兼容性
Dart Sass
自 1.52.1 起
LibSass
Ruby Sass

接下来,我们更改了处理色相参数的角度单位的方式,以匹配 CSS 规范。这意味着带有 gradradturn 单位的数字将转换为 deg0.5turn 将转换为 180deg100grad 将转换为 90deg,依此类推。

由于此更改对于保持 CSS 兼容性是必要的,因此根据 Dart Sass 兼容性策略,它仅使用次要版本号进行了更改。但是,它尽可能少地更改行为,以确保 Sass 根据 CSS 规范解释所有有效的 CSS。

阶段 3阶段 3 永久链接

兼容性
Dart Sass
LibSass
Ruby Sass

最后,在 Dart Sass 2.0.0 中,如果颜色函数传递的色相参数带有非角度单位,则会抛出错误。仍然允许无单位色相。

饱和度和亮度饱和度和亮度永久链接

在指定 HSL 颜色的饱和度和亮度时,CSS 仅允许 % 单位。甚至不允许无单位数字(与色相不同)。从历史上看,Sass 允许任何单位,并将其解释为 %。您甚至可以编写 hsl(0, 100px, 50s),Sass 会返回颜色 red

为了解决此问题并使 Sass 与 CSS 规范保持一致,我们正在分两个阶段进行更改

阶段 1阶段 1 永久链接

兼容性
Dart Sass
自 1.32.0 起
LibSass
Ruby Sass

目前,如果您将无单位或单位(除了 %)的数字作为亮度或饱和度传递给任何函数,Sass 仅发出弃用警告。

阶段 2阶段 2 永久链接

兼容性
Dart Sass
LibSass
Ruby Sass

在 Dart Sass 2.0.0 中,如果颜色函数传递的饱和度或亮度参数无单位或非 % 单位,则会抛出错误。

AlphaAlpha 永久链接

在指定颜色的 alpha 值时,CSS(截至颜色级别 4)允许 0 到 1 之间的无单位值或 0%100% 之间的 % 值。在大多数情况下,Sass 遵循此行为,但函数 color.adjust()color.change() 从历史上允许任何单位,并将其解释为无单位。您甚至可以编写 color.change(red, $alpha: 1%),Sass 会返回不透明颜色 red

为了解决此问题并使 Sass 与 CSS 规范保持一致,我们正在分三个阶段进行更改

阶段 1阶段 1 永久链接

兼容性
Dart Sass
自 1.56.0 起
LibSass
Ruby Sass

目前,如果您将带任何单位(包括 %)的数字作为 alpha 值传递给 color.change()color.adjust(),Sass 仅发出弃用警告。

阶段 2阶段 2 永久链接

兼容性
Dart Sass
LibSass
Ruby Sass

接下来,我们将更改 color.change()color.adjust() 的 alpha 参数处理 % 单位的方式。带有单位 % 的 Alpha 将除以 100%,将其转换为 0 到 1 之间的无单位数字。

由于此更改是一个错误修复,它提高了与其他 Sass 函数的一致性,因此它将仅使用次要版本号进行更改。它将在阶段 1 发布后至少三个月更改,以便用户有时间调整其代码并避免该错误。

阶段 3阶段 3 永久链接

兼容性
Dart Sass
LibSass
Ruby Sass

最后,在 Dart Sass 2.0.0 中,如果 color.change()color.adjust() 传递的 alpha 参数带有非 % 单位,则会抛出错误。仍然允许无单位 Alpha。

math.random()math.random() 永久链接

math.random() 函数 从历史上忽略了 $limit 中的单位并返回了一个无单位值。例如,math.random(100px) 将删除“px”并返回一个类似于 42 的值。

Sass 的未来版本将停止忽略 $limit 参数的单位,并返回具有相同单位的随机整数。

游乐场

SCSS 语法

@use "sass:math";

// Future Sass, doesn't work yet!
@debug math.random(100px); // 42px
游乐场

Sass 语法

@use "sass:math"

// Future Sass, doesn't work yet!
@debug math.random(100px)  // 42px

阶段 1阶段 1 永久链接

兼容性
Dart Sass
自 1.54.5 起
LibSass
Ruby Sass

目前,如果您将带单位的 $limit 传递给 math.random(),Sass 会发出弃用警告。

阶段 2阶段 2 永久链接

兼容性
Dart Sass
LibSass
Ruby Sass

在 Dart Sass 2.0.0 中,传递带单位的 $limit 数字将是一个错误。

阶段 3阶段 3 永久链接

兼容性
Dart Sass
LibSass
Ruby Sass

在 Dart Sass 2.0.0 之后的次要版本中,再次允许将带单位的 $limit 数字传递给 math.random() 函数。它将返回与 $limit 相同单位的随机整数,而不是无单位数字。

权重权重永久链接

color.mix() 函数color.invert() 函数 从历史上都在其 $weight 参数中忽略了单位,尽管该参数在概念上表示百分比。Sass 的未来版本将需要单位 %

阶段 1阶段 1 永久链接

兼容性
Dart Sass
自 1.56.0 起
LibSass
Ruby Sass

目前,如果您将无单位或单位(除了 %)的 $weight 传递给 color.mix()color.invert(),Sass 会发出弃用警告。

阶段 2阶段 2 永久链接

兼容性
Dart Sass
LibSass
Ruby Sass

在 Dart Sass 2.0.0 中,如果 color.mix()color.invert() 传递的 $weight 无单位或非 % 单位,则会抛出错误。

索引索引永久链接

list.nth() 函数list.set-nth() 函数 从历史上都在其 $n 参数中忽略了单位。Sass 的未来版本将禁止任何单位。

阶段 1阶段 1 永久链接

兼容性
Dart Sass
自 1.56.0 起
LibSass
Ruby Sass

目前,如果您将无单位或单位(除了 %)的 $weight 传递给 color.mix()color.invert(),Sass 会发出弃用警告。

阶段 2阶段 2 永久链接

兼容性
Dart Sass
LibSass
Ruby Sass

在 Dart Sass 2.0.0 中,如果 list.nth()list.set-nth() 传递的索引 $n 带有单位,则会抛出错误。

我可以静默警告吗?我可以静默警告吗?永久链接

Sass 提供了一套强大的选项来管理您何时看到哪些弃用警告。

简洁和详细模式简洁和详细模式永久链接

默认情况下,Sass 以简洁模式运行,其中它只会打印每种类型的弃用警告五次,然后它会静默其他警告。这有助于确保用户知道何时需要了解即将发生的重大更改,而不会产生过多的控制台噪音。

如果您以详细模式运行 Sass,它将打印遇到的每个弃用警告。这对于跟踪修复弃用时需要完成的剩余工作非常有用。您可以使用命令行上的--verbose标志或JavaScript API中的verbose选项启用详细模式。

⚠️ 注意!

JS API运行时,Sass 不会在编译之间共享任何信息,因此默认情况下,它会为编译的每个样式表打印五个警告。但是,您可以通过编写(或要求您喜欢的框架的 Sass 插件的作者编写)一个自定义Logger来解决此问题,该Logger每个弃用只打印五个错误,并且可以在多个 编译中共享。

抑制依赖项中的弃用警告抑制依赖项中的弃用警告 永久链接

有时,您的依赖项会有您无法处理的弃用警告。您可以使用命令行上的--quiet-deps标志或JavaScript API中的quietDeps选项来抑制依赖项中的弃用警告,同时仍为您的应用打印警告。

对于此标志的目的,“依赖项”是指任何不仅仅是从入口点样式表进行一系列相对加载的样式表。这意味着来自加载路径的任何内容,以及通过自定义 导入器加载的大多数样式表。

抑制特定弃用警告抑制特定弃用警告 永久链接

如果您知道某个特定的弃用警告对您来说不是问题,则可以使用命令行上的--silence-deprecation标志或JavaScript API中的silenceDeprecations选项来抑制该特定弃用警告。