Ryan Chandler

Applying a Colored Overlay to a Background Image

1 min read

I recently worked on a project that had a background image covering the entire body of the page. One of the differences was that the background also needed a colored overlay, in this case a black overlay with slight opacity.

I would normally do this using an absolutely positioned element stretching to all 4 corners of the page with a z-index lower than the <main> content of the page, but then you end up constantly working about stacking context problems.

After some digging I realised that you can pass multiple values to the background-image CSS property.

body {
    background-image: url('bg-img.jpg'), ...;
}

This makes it really simple to apply a colored overlay using a linear-gradient() between 2 identical colors, combined with the background-blend-mode property.

body {
    background-image: url('bg-img.jpg'), linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5));
    background-blend-mode: overlay;
}

This will place the gradient on top of the background image.

If you use Tailwind, then you can use the bg-blend-overlay class to apply the blend mode.