重大变更:严格函数 单位
各种内置函数将变得更加严格,它们允许的单位和处理这些单位的方式将更加一致。这使得 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 规范保持一致,我们正在进行多 阶段的更改
第一阶段第一阶段永久链接
- Dart Sass
- 自 1.32.0 起
- LibSass
- ✗
- Ruby Sass
- ✗
起初,如果您将带有非 deg
单位的数字作为色调传递给任何函数,Sass 只会发出弃用警告。仍然 允许传递无单位数字。
第二阶段第二阶段永久链接
- Dart Sass
- 自 1.52.1 起
- LibSass
- ✗
- Ruby Sass
- ✗
接下来,我们更改了处理色调参数的角度单位的方式,以匹配 CSS 规范。这意味着带有 grad
、rad
或 turn
单位的数字将被转换为 deg
:0.5turn
将被转换为 180deg
,100grad
将被转换为 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()
,它们将抛出错误。