I recently had to add an overlay to an image.
I created an overlay div, with a black background. Inside this div is an image which the client could change the opacity using a sliding scale.

The issue I had was that the images were being lazy loaded, and all transitioned onto the screen after a 0.6s delay. This meant that the overlay with its black background would display as a black square for 0.6 seconds before the images loaded. Not ideal.
I decided to use a keyframe to add a delay on the overlay loading onto the page.
A fade in of colour can easily be achieved by using the @keyframes rule.
CSS
div {
width: 200px;
height: 200px;
background-color: #fff;
animation-name: fadein;
animation-duration: 4s;
}
@keyframes fadein {
from {background-color: #fff;}
to {background-color: #000;}
}
(click on Result to re-run the animation below)
The problem:
- after the transition is complete it goes back to the original colour: white
- I don't actually need a transition at all, I just want a delay. After 0.6s load the black background.
The key to achieve this, is to set the background to white for 99% of the transition & black for the remaining 1%.
div {
width: 200px;
height: 200px;
background-color: #fff;
animation: fadein 3s forwards;
}
@keyframes fadein {
99% {
background-color:#fff;
}
100%{
background-color:#000;
}
}
I've added a 3 second delay to the code below.
(click on Result to re-run the animation below)
