在 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
这不会产生所需的颜色。此外,由于 lighten
和 darken
只接受百分比,我对我正在迁移的代码库中大于 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.
#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);
一段时间以来,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
这不会产生所需的颜色。此外,由于 lighten
和 darken
只接受百分比,我对我正在迁移的代码库中大于 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.
#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);