重大变更:严格函数单位
各种内置函数将在允许的单位方面变得更加严格,并且将更一致地处理这些单位。这使得 Sass 与 CSS 规范更加兼容,并有助于更快地捕获错误。
色相色相永久链接
- Dart Sass
- 自 1.32.0 起
- LibSass
- ✗
- Ruby Sass
- ✗
在指定颜色的色相时,CSS 允许任何角度单位(deg
、grad
、rad
或 turn
)。它还允许无单位数字,其解释为 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 规范。这意味着带有 grad
、rad
或 turn
单位的数字将转换为 deg
:0.5turn
将转换为 180deg
,100grad
将转换为 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
参数的单位,并返回具有相同单位的随机整数。
阶段 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
选项来抑制该特定弃用警告。