Skip to content

Less - 颜色混合函数

LESS 提供了一组颜色混合函数,允许混合两种颜色以生成第三种颜色。这些函数的操作方式类似于图像编辑软件(如 Photoshop 或 GIMP)中的混合模式。它们基于通道(红、绿、蓝)逐一进行操作,对输入颜色的对应通道值应用数学运算。Alpha 通道通常单独处理或按每个函数指定的方式处理。

这些函数对于程序化生成颜色主题、创建微妙的 UI 元素状态或实现复杂的颜色效果非常有用。

下面是 LESS 中可用的颜色混合函数列表,包括描述和概念性示例。在这些示例中,假设 @color1 和 @color2 是有效的颜色值。

序号函数、语法与描述概念性效果 / 类比
1multiply
multiply(@color1, @color2)
乘法模式混合两颜色的 RGB 通道。结果通常是较暗的颜色。与黑色相乘结果为黑色;与白色相乘颜色不变。
想象将两个彩色透明片叠在一起;结果会变暗。
2screen
screen(@color1, @color2)
将 RGB 通道的反相值相乘,然后再次反相结果。这会产生更亮的颜色。与白色相屏结果为白色;与黑色相屏颜色不变。效果与 multiply 相反。
想象将两束彩色光投射到表面上;结果会更亮。
3overlay
overlay(@color1, @color2)
结合了 multiply 和 screen。如果基础颜色(第一个参数)较暗,则执行乘法;如果较亮,则执行屏幕。这保留了基础颜色的高光和阴影,同时与第二种颜色混合。
适用于覆盖图案或纹理,同时保留基础颜色的明暗度。
4softlight
softlight(@color1, @color2)
应用更柔和的 overlay 版本。根据混合颜色(第二个参数)变暗或变亮。效果比 overlay 更微妙。
适用于柔和的高光或阴影效果。
5hardlight
hardlight(@color1, @color2)
类似于 overlay,但基础颜色和混合颜色的角色互换。就像第二种颜色是照射在第一种颜色上的强烈聚光灯。
创建比 softlight 更强的对比度。
6difference
difference(@color1, @color2)
从较亮的颜色的通道值中减去较暗颜色的通道值。与白色混合会反相颜色;与黑色混合则不变。
可以产生鲜明、有时甚至是迷幻的色彩对比。
7exclusion
exclusion(@color1, @color2)
类似于 difference,但对比度较低。颜色相同时结果为黑色。
difference 效果的柔和版本。
8average
average(@color1, @color2)
计算两种输入颜色在通道(RGB)基础上的平均值。
简单的混合,结果是介于两种输入颜色之间的颜色。
9negation
negation(@color1, @color2)
类似于 difference,但其中一种颜色的结果被反相。它就像 abs(colorA - (1 - colorB))。结果具有高对比度。
另一种实现强烈对比颜色效果的方法。

让我们看看这些函数如何在 LESS 样式表中使用:

// LESS Code
@base-color: #007bff; // 亮蓝色
@accent-color: #ffc107; // 亮黄色(偏橙色)
@dark-overlay: #333333; // 深灰色
@light-overlay: #eeeeee; // 浅灰色
.box {
width: 100px;
height: 100px;
margin: 10px;
display: inline-block;
color: white;
text-align: center;
line-height: 100px;
}
.multiplied {
background-color: multiply(@base-color, @accent-color); // 预期:较暗,可能是浑浊的颜色
}
.screened {
background-color: screen(@base-color, @accent-color); // 预期:较亮,更鲜艳的颜色
}
.overlay-dark {
background-color: overlay(@base-color, @dark-overlay); // 预期:基础颜色变暗,保留一些特性
}
.softlight-light {
background-color: softlight(@base-color, @light-overlay); // 预期:基础颜色被微妙地提亮
}
.averaged {
background-color: average(@base-color, @accent-color); // 预期:介于蓝色和黄色/橙色之间的颜色
}

将此 LESS 编译并应用于具有相应类的 HTML 元素时,每个 .box 将根据混合操作具有不同的背景颜色。例如,.multiplied 可能是一种深色、略微去饱和的颜色,而 .screened 则是一种非常浅、充满活力的颜色。

  • **主题:**通过将基础主题颜色与中性色或强调色混合来生成调色板。
  • **UI 状态:**通过稍微变暗或变亮组件的基础颜色来创建 :hover、:active 或 :disabled 状态(例如,background-color: screen(@button-color, #222) 用于微妙的悬停效果)。
  • **复杂背景:**无需多张背景图片或伪元素即可实现分层颜色效果。
  • **数据可视化:**通过在关键颜色之间混合来程序化地生成色阶。

尝试使用这些函数是理解其效果的关键。使用在线 LESS 编译器是立即查看不同颜色组合和混合函数结果的好方法。