有一些挑战和注意事项
通常,人们不会使用像darken() 这样的函数来获得他们已经知道他们想要的颜色(他们只是输入他们已经知道他们想要的颜色值)。但是,我会假设这个问题的背后还有更多。
darken() 函数
The darken() function of LESS 影响从其hsl 设置(色调、饱和度、亮度)的角度考虑的颜色的“亮度”或“亮度”部分。这是从该视图考虑的两种颜色(based on this site,我注意到站点之间存在一些差异——有些可能比其他颜色更准确):
#952262 = hsl(327, 63%, 36%)
#681744 = hsl(327, 64%, 25%)
因此,您寻求的黑暗值可以手动从该站点通过减法计算,36% - 25% = 11%。将其插入您的函数:
darken(@base_color, 11%);
产量
#671844 /* not 681744! */
嘿!这不符合我的目标!
请注意,上面的s(饱和度)值与1% 从您的基础颜色到您的目标颜色不同,这意味着从技术上讲,您不能仅仅通过darken() 函数从基础颜色到目标颜色.相反,您需要使用另一个函数来调整 s 的值,或者您的目标应稍微调整为以下值(使 s 保持在 63%):
#681844 = hsl(327, 63%, 25%)
但该数字 (#681844) 仍然与 LESS 输出 (#671844) 不匹配。该网站将 LESS 输出显示为hsl(327, 62%, 25%)(注意饱和度值下降到62%)。我怀疑这意味着网站计算和 LESS 函数计算之间舍入计算的差异。这很可能就是为什么您的原始数字在饱和度上也被1% 关闭的原因,无论您使用的任何程序都与网站进行了不同的舍入。这可能不是什么大问题,因为它可以让您接近目标值。
使用 LESS 进行计算
现在,根据您的实际操作,您可以使用 LESS 计算该百分比,而不是使用 lightness() 函数手动计算。假设您已根据网站将目标调整为#681844。那么这是一个获取你想要的百分比的例子(我用一个假属性color-calc来显示计算:
@base_color: #952262; /* Base #952262 = hsl(327, 63%, 36%) */
@real_target_color: #681844; /* Real Target #681844 = hsl(327, 63%, 25%) */
@color_calc: (lightness(@base_color) - lightness(@real_target_color));
.test {
color-calc: @color_calc;
color: darken(@base_color, 11%);
}
输出:
.test {
color-calc: 11%;
color: #671844;
}
请注意,它计算了11% 在黑暗中的差异。另外,请注意,由于(我想)舍入问题,它最终的值仍然与目标略有不同。插入最终值 LESS 生成 (#671844),因为目标仍会为 darken() 生成相同的 11% 值。