Skip to content

Less - Color Blending Functions

LESS provides a set of color blending functions that allow you to mix two colors to produce a third. These functions operate similarly to blending modes found in image editing software like Photoshop or GIMP. They work on a per-channel basis (Red, Green, Blue), applying mathematical operations to the corresponding channel values of the input colors. The alpha channel is typically handled separately or as specified by each function.

These functions are very useful for programmatic color theme generation, creating subtle UI element states, or achieving complex color effects.

Below is a list of the color blending functions available in LESS, along with descriptions and conceptual examples. In these examples, assume @color1 and @color2 are valid color values.

Sr.No.Function, Syntax & DescriptionConceptual Effect / Analogy
1multiply
multiply(@color1, @color2)
Multiplies the RGB channels of the two colors. The result is usually a darker color. Multiplying with black results in black; multiplying with white leaves the color unchanged.
Imagine layering two colored transparencies; the result is darker.
2screen
screen(@color1, @color2)
Multiplies the inverse of the RGB channels and then inverts the result. This produces a brighter color. Screening with white results in white; screening with black leaves the color unchanged. It’s the opposite effect of multiply.
Imagine projecting two colored lights onto a surface; the result is brighter.
3overlay
overlay(@color1, @color2)
Combines multiply and screen. If the base color (first argument) is dark, it multiplies; if light, it screens. This preserves highlights and shadows from the base color while blending it with the second color.
Useful for overlaying patterns or textures while retaining the lightness/darkness of the base.
4softlight
softlight(@color1, @color2)
Applies a softer version of overlay. Darkens or lightens the colors depending on the blend color (second argument). The effect is more subtle than overlay.
Good for gentle highlighting or shading effects.
5hardlight
hardlight(@color1, @color2)
Similar to overlay but with the roles of the base and blend colors swapped. It’s as if the second color is a harsh spotlight on the first.
Creates a stronger contrast than softlight.
6difference
difference(@color1, @color2)
Subtracts the darker color’s channel values from the lighter color’s channel values. Blending with white inverts the color; blending with black produces no change.
Can create stark, sometimes psychedelic, color contrasts.
7exclusion
exclusion(@color1, @color2)
Similar to difference but with lower contrast. Identical colors will result in black.
A softer version of the difference effect.
8average
average(@color1, @color2)
Computes the average of the two input colors on a per-channel (RGB) basis.
A straightforward mix, resulting in a color midway between the two inputs.
9negation
negation(@color1, @color2)
Similar to difference but with an inverted result from one of the colors. It works like abs(colorA - (1 - colorB)). Results in high contrast.
Another way to achieve strong, contrasting color effects.

Let’s see how some of these functions can be used in a LESS stylesheet:

// LESS Code
@base-color: #007bff; // A bright blue
@accent-color: #ffc107; // A bright yellow (orange-ish)
@dark-overlay: #333333; // Dark gray
@light-overlay: #eeeeee; // Light gray
.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); // Expected: Darker, possibly muddy color
}
.screened {
background-color: screen(@base-color, @accent-color); // Expected: Lighter, brighter color
}
.overlay-dark {
background-color: overlay(@base-color, @dark-overlay); // Expected: Base color darkened, retaining some character
}
.softlight-light {
background-color: softlight(@base-color, @light-overlay); // Expected: Base color subtly lightened
}
.averaged {
background-color: average(@base-color, @accent-color); // Expected: A color midway between blue and yellow/orange
}

When this LESS is compiled and applied to HTML elements with the respective classes, each .box will have a different background color based on the blending operation. For example, .multiplied would likely be a dark, somewhat desaturated color, while .screened would be a very light, vibrant color.

  • Theming: Generate color palettes by blending a base theme color with neutrals or accent colors.
  • UI States: Create :hover, :active, or :disabled states by slightly darkening or lightening a component’s base color (e.g., background-color: screen(@button-color, #222) for a subtle hover).
  • Complex Backgrounds: Achieve layered color effects without multiple background images or pseudo-elements.
  • Data Visualization: Programmatically generate color scales by blending between key colors.

Experimenting with these functions is key to understanding their effects. Using an online LESS compiler can be a great way to see the results of different color combinations and blending functions instantly.