重大变更:严格函数 单位

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

色调色调永久链接

兼容性
Dart Sass
自 1.32.0 起
LibSass
Ruby Sass

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

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

第一阶段第一阶段永久链接

兼容性
Dart Sass
自 1.32.0 起
LibSass
Ruby Sass

起初,如果您将带有非 deg 单位的数字作为色调传递给任何函数,Sass 只会发出弃用警告。仍然 允许传递无单位数字。

第二阶段第二阶段永久链接

兼容性
Dart Sass
自 1.52.1 起
LibSass
Ruby Sass

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

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

第三阶段第三阶段永久链接

兼容性
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 中,如果传递的 Alpha 参数具有非 % 单位,color.change()color.adjust() 将抛出错误。仍然允许使用无单位 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 中,如果将不带单位或非 % 单位的 $weight 传递给 color.mix()color.invert(),它们将抛出错误。

索引索引永久链接

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 中,如果将带有 单位的索引 $n 传递给 list.nth()list.set-nth(),它们将抛出错误。