Almost there
We're foxing your request.
Stay cool!
Something went wrong.
Please try again or contact us for support.
accidental ꩜ initiates ꩜ serendipitous
Updated on December 2018. Surprise included.
There are two use cases Background-image in CSS or inline style and Img tag directly in HTML. Please note, for the second case (Img tag directly in HTML) the image have to be inside container.
The trick here is to make sure the shadow height is equal or bigger than the image height.
In the example below the height of the image is 528px, but I have used 3000px for the v-offset box-shadow value. Just in case :)
HTML
<div class="canvas"></div>
CSS
.canvas {
width: 100%;
height: -webkit-fill-available;
min-height: 100%;
background-image: url(image.png);
background-size: cover;
background-position-x: center;
box-shadow: 0 3000px rgba(204, 0, 255, 0.4) inset;
}
Example with purple shadow, opacity 0.4
The trick here is to use same color value for the linear-gradient, value of the Background property.
This is of course if we want to use same color for the image cover. Gradient can be used instead.
HTML
<div class="canvas"></div>
CSS
.canvas {
width: 100%;
height: -webkit-fill-available;
min-height: 100%;
background: linear-gradient(rgba(204, 0, 255, 0.5), rgba(204, 0, 255, 0.5)), url(image.png);
background-size: cover;
background-position-x: center;
}
Example with linear-gradient, same purple value, opacity 0.5
Example with linear-gradient, opacity 0.6
The trick here is to use Pseudo Element's :after. That is it :)
HTML
<div class="canvas"></div>
CSS
.canvas {
position: relative;
width: 100%;
height: -webkit-fill-available;
min-height: 100%;
background: url(image.png);
background-size: cover;
background-position-x: center;
}
.canvas:after {
content: '';
position: absolute;
width: 100%;
height: 100%;
background: rgba(204, 0, 255, 0.7);
}
Example with purple :after, opacity 0.7
What can be done if image in an HTML page? - We will need a container for this image.
HTML
<div class="canvas">
<img src="image.png">
</div>
CSS
.canvas {
position: relative;
display: inline-block;
}
.canvas img {
width: 100%;
}
.canvas:before {
content: '';
position: absolute;
width: 100%;
height: 100%;
box-shadow: 0 3000px rgba(204, 0, 255, 0.4) inset;
}
Example with purple shadow, opacity 0.4
This example uses solid background color, but we could also use the linear-gradient (background value).
HTML
<div class="canvas">
<img src="image.png">
</div>
CSS
.canvas {
position: relative;
display: inline-block;
}
.canvas img {
width: 100%;
}
.canvas:before {
content: '';
position: absolute;
width: 100%;
height: 100%;
background: rgba(204, 0, 255, 0.5);
}
Example with purple background, opacity 0.5
Now, after we have covered all the options, it is a time for small surprise. Here is the thing.
Usually we have an image and on top of it we will apply the transparent color to tint it.
But if we will do opposite, the result going to be same solid background and transparent image on top of it.
Image + Color with 0.4 opacity = Color + Image with 0.6 opacity
The formula:
x + zy = y + (1 - z)x
HTML
<div class="canvas">
<img src="image.png">
</div>
CSS
.canvas {
position: relative;
display: inline-block;
background: rgb(204, 0, 255);
}
.canvas img {
display: block;
width: 100%;
opacity: 0.6;
}
Comparing solid background and image with 0.6 opacity
and
one of our previous results Img tag/Tint image using Box-shadow property with shadow opacity 0.4
As you can see the result is same.