lighten
和 darken
函数都通过在 HSL 空间中添加或减去亮度来操作颜色的亮度。基本上,它们只是 adjust-color
函数的 $lightness
参数的别名。
问题是,这些函数通常不会产生预期结果。另一方面,mix
函数是通过将颜色与白色或黑色混合来使颜色变亮或变暗的一种好方法。
使用 mix
而不是上述两个函数之一的优势在于,它会随着你降低颜色的比例而逐渐变为黑色(或白色),而 darken
和 lighten
会迅速将颜色吹到黑色或白色。
为了避免每次都编写混合函数,这不仅耗时,而且不够明确,你可以轻松地创建两个函数 tint
和 shade
(它们也恰好是 Compass 的一部分)
/// Slightly lighten a color
/// @access public
/// @param {Color} $color - color to tint
/// @param {Number} $percentage - percentage of `$color` in returned color
/// @return {Color}
@function tint($color, $percentage) {
@return mix(white, $color, $percentage);
}
/// Slightly darken a color
/// @access public
/// @param {Color} $color - color to shade
/// @param {Number} $percentage - percentage of `$color` in returned color
/// @return {Color}
@function shade($color, $percentage) {
@return mix(black, $color, $percentage);
}
用法
.foo {
color: tint(#BADA55, 42%);
}
.bar {
background-color: shade(#663399, 42%);
}
.foo {
color: #e2efb7;
}
.bar {
background-color: #2a1540;
}
看起来这些代码示例被反转了。来自 Compass
来自 Sass 指南
看?颜色的位置被反转了。
上面的评论是正确的。对颜色进行颜色调整是指将其移向白色。因此,
tint($color, 90)
预计将为 90% 朝向白色,但函数中颜色的位置必须是mix(white, $color, $perc)
才能使它工作。这似乎与“颜色调整”的传统/图形设计定义不符,在该定义中,更高的百分比实际上是更深的颜色,而较低的百分比更接近白色。见 http://graphicdesign.stackexchange.com/a/46187、https://helpx.adobe.com/indesign/using/tints.html、http://www.brandwares.com/RGBTintCalculator.php 和 http://tintmyride.sharepoint.com/Pages/WindowTintPercentagesandLevels.aspx。
品牌指南中指定的颜色调整也是以相同的方式工作的:百分比越高,它就越远离白色,越接近全色。
不幸的是,Compass/SASS 似乎已经确定了非传统的颜色调整定义,因此最好保持现状。
不过,文档注释仍然是错误的。
$color
在返回的颜色中的百分比
— 但定义的函数将使用白色的百分比,而不是$color
的百分比。不错!它现在已修复!
我在这里创建了一个小的 Sassmeister 示例来直观地显示 lighten/darken 和这些函数之间的区别。随意使用它
https://#/FX0WPQzRJf
我注意到传递给 mix 的第一个参数是你要“混合”到基础颜色(第二个参数)中的颜色。
我的颜色方向错了,结果出乎意料,即按百分比将我的颜色混合到白色中。