重大变更:颜色 JS API

在 Sass 支持 CSS Color 4 的所有颜色空间之后,JS 颜色 API 中某些在假设所有颜色都相互兼容的情况下设计的方面不再有意义。

就像在添加对 CSS Color 4 的支持后,Sass 的一些颜色函数已弃用一样,用于操作颜色的 JS API 的一些角落也已弃用。

color.change() 现在需要一个 space 用于跨空间更改color.change() 现在需要一个 space 用于跨空间更改 永久链接

以前,color.change() 方法 只接受来自 RGBHSLHWB 空间的一组通道名称。只要这些通道没有跨空间混合(例如,同时更改 redhue),Sass 就可以确定预期的空间。

在 Color 4 中,颜色空间不再仅从其通道名称中就可以明确区分。许多空间具有 redgreenblue 通道,但范围不同;许多空间具有 hue 通道,会产生非常不同的色轮。为了解决这种歧义,color.change() 现在接受一个 space 参数,该参数显式指定要进行转换的颜色空间的名称。

const color = new sass.SassColor({red: 0x66, green: 0x33, blue: 0x99});
color.change({hue: 270, space: "okclh"});

如果相关颜色不在 旧版颜色空间 中,或者如果要更改仅存在于非旧版颜色空间中的通道(如色度),则必须指定颜色空间。如果要更改颜色自身空间中存在的通道,则始终可以选择,因此 color.change({red: 0.8}) 始终指的是任何具有 redgreenblue 通道的颜色的原生红色通道。

为了向后兼容,如果要更改旧版颜色的旧版通道,Sass 仍然会自动为您转换颜色。但是,此行为已弃用。为确保安全,除非您确定颜色已在要更改其通道的颜色空间中,否则始终传递 space 参数。

null 通道值null 通道值 永久链接

CSS Color 4 中的主要变化之一是“缺失”通道的新概念,例如 “缺失”通道。例如,hsl(none 0% 40%) 缺少色调,在大多数情况下被视为 0,但不参与颜色插值,因此具有此颜色的渐变在中间不会出现幻影红色色调。在构造颜色时,Sass 将缺失的值表示为 null

在添加对 CSS Color 4 的支持之前,Sass JS API 的 TypeScript 类型禁止在所有相关位置使用 null。但是,代码本身将 nullundefined 同等对待,我们不希望破坏任何依赖于此行为的纯 JavaScript 代码的兼容性。目前,null 值被视为 undefined,并在构造新的[旧版颜色]或为旧版颜色调用 color.change() 时发出弃用警告。在这两种情况下,如果显式传递 space 参数,则可以选择新行为,并且 null 将被视为缺失的通道。

过渡期过渡期 永久链接

兼容性
Dart Sass
自 1.79.0 起
LibSass
Ruby Sass

首先,我们将为所有将要更改的这些 API 的用法发出弃用警告。在 Dart Sass 2.0.0 中,重大更改将完全生效,旧的行为将不再像以前那样工作。

我可以消除警告吗?我可以消除警告吗? 永久链接

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

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

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

如果改为在详细模式下运行 Sass,它将打印遇到的每个弃用警告。这对于在修复弃用时跟踪剩余工作非常有用。您可以使用 JavaScript API 中的 verbose 选项 启用详细模式。

⚠️ 注意!

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

消除依赖项中的弃用警告消除依赖项中的弃用警告 永久链接

有时,您的依赖项会发出您无法解决的弃用警告。您可以使用 JavaScript API 中的 quietDeps 选项 消除依赖项中的弃用警告,同时仍为您的应用程序打印警告。

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

消除特定弃用警告消除特定弃用警告 永久链接

如果您知道某个特定的弃用警告对您来说不是问题,则可以使用 JavaScript API 中的 silenceDeprecations 选项 消除该特定弃用警告的警告。