在 new SASS 中将一个整数添加到一种颜色相当于什么?

What is the equivalent of adding an integer to a color in new SASS?

一段时间以来,color arithmetic in SASS has been deprecated 并且在该工具的较新版本中不可用。我目前正在迁移一个具有颜色算法的旧项目。

例如,旧的 scss 文件有这样的东西:

background: $body-bg-color-dark-light + 10;

$body-bg-color-dark-light 是一个简单的 RGB 值(如#FF1100)

使用 the new SASS color functions 重现与上述功能完全相同的替代方法是什么?请注意,我们添加的是一个简单的整数而不是百分比。

我试过的替代方案是:

background: lighten($body-bg-color-dark-light, 10); 
// Note that '10' is not a percentage in the previous example

这不会产生所需的颜色。此外,由于 lightendarken 只接受百分比,我对我正在迁移的代码库中大于 100 的值感到困惑。

另一个问题是我无法获得 SASS 的旧版本(或为此找到哪个版本)来确定通过简单地向颜色添加一个整数到底产生了什么,所以我可以应用新的颜色函数来产生相同的结果。

编辑:

我设法找到了那个 SCSS 的旧编译版本。该示例中的一个原始值是 #020507.

10 添加到生成的结果 #0c0f11。看起来它正在向每个颜色通道添加 10(或十六进制的 A)。

编辑:感谢 OP 提供的新示例,可以确认第一个假设:

#020507 + 10 = #020507 + #0A0A0A = #0C0F11

我会在这里做一些推测,但我似乎找不到与你类似的例子。


SASS documentation about operators 上您可以阅读:

Early on in Sass’s history, it added support for mathematical operations on colors. These operations operated on each of the colors’ RGB channels separately, so adding two colors would produce a color with the sum of their red channels as its red channel and so on.

这里给出了一些例子 here and here:

#020406 + #020406 = #04080c
#020406 * 2 = #04080c
#102030 + #010203 = #112233
#101010 * 2 = #202020

在你的例子中,一个整数被加到颜色上;假设它是一个十进制值,它的十六进制值将是 A.


- 第一个假设(正确)

如果我们按照文档中的说明进行操作,则意味着:

#FF1100 + 10 = #FF1100 + #0A0A0A

根据this calculator,结果为:

#FF1100 + #0A0A0A = 1091B0A

我不太清楚十六进制值是如何工作的,但由于结果不是有效的颜色,我假设红色通道忽略了加法(因为它已经有最大值)。所以最后我们有:

#FF1100 + 10 = #FF1B0A

现在,使用 SASS 颜色函数相当于使用 adjust-color:

adjust-color(#FF1100, $red: 10, $green: 10, $blue: 10);

- 第二个假设(不正确)

该值仅按原样添加,而不是单独添加到每个通道。所以,使用 same calculator:

#FF1100 + 10 = #FF1100 + A = #FF110A

ajust-color等价:

adjust-color(#FF1100, $blue: 10);