How To Blur Background Image Without Affecting The Child Element

Featured on Hashnode

Let's pick up where we left off last week.
So in last week's article I talked about getting rid of white borders. And now we want to set the blurry image as background and add some stuff in front of it.
If you use the second trick, you don't even need to read this article but if you're gonna use the first trick then stay with me .


And now we want to learn how to do this :

323222211.png



The first thing you should absolutely avoid is doing this :

<section class="blurry-bg">       <!-- Don't use section element as your background -->
    </section>

You need to create a new div inside your section and set a background image for that div. Because if you set it for your section, it will affect your child elements and things will get ugly , like this :

tee.png

Instead do this :

 <section class="gallery-section">

<!-- Create a separate div for the background image -->
        <div class="blurry-bg"></div> 
    </section>



Now we need to set an image as the background and then blurred it , like how we did it in last week's article :

.blurry-bg {
    width: 100%;
    height: 100vh;
    background-image: linear-gradient(rgba(0, 0, 0, 0.63), rgba(0, 0, 0, 0.623)), url(img/000333.jpg);
    background-attachment: fixed;
    background-position: center;
    background-repeat: no-repeat;
    background-size: cover;
}

.blurry-bg::before {
    content: "";
    position: absolute;
    width: 100%;
    height: 100vh;
    backdrop-filter: blur(5px);
}

565.png

After doing so , you can add your child elements

 <section class="gallery-section">
        <div class="blurry-bg"></div> 
        <p>Some text here</p>
        <img src="/img/000333.jpg">
    </section>

But there's gonna be a little problem here. Your elements will go below the background.

999.png

We will fix it with relative/absolute positioning and z-index :
Set your background element to position: absolute; and the parent element to position: relative; (which in our case is the section which I gave it class="gallery-section" )


 .gallery-section {
    position: relative;
}

.blurry-bg {
    background-image: linear-gradient(rgba(0, 0, 0, 0.63), rgba(0, 0, 0, 0.623)), url(img/000333.jpg);
    width: 100%;
    height: 100vh;
    position: absolute;
    z-index: -1;  <-- comment z-index and see what happens -->

}

You might wonder why we need z-index

Take a look at this pic

You see that blue layer ?
This is where your elements are right now. in order to bring it back up to the surface (green layer) we set the z-index of the background to "-1" , meaning we sent green layer behind our elements.


Here's the final touch

 <section class="gallery-section">
        <div class="blurry-bg"></div> 
        <p>Some text here</p>
        <img src="/img/000333.jpg">
    </section>

 .gallery-section {
    position: relative;
}

.blurry-bg {
    width: 100%;
    height: 100vh;
    position: absolute;
    background-image: linear-gradient(rgba(0, 0, 0, 0.63), rgba(0, 0, 0, 0.623)), url(img/000333.jpg);
    background-attachment: fixed;
    background-position: center;
    background-repeat: no-repeat;
    background-size: cover;
    z-index: -1;
}

.blurry-bg::before {
    content: "";
    position: absolute;
    width: 100%;
    height: 100vh;
    backdrop-filter: blur(7px);
}

323222211.png


I've created a small project. You can check it out here

Screenshot from 2021-04-03 20-47-14.png


And here is the link to github

Comments (2)

Catalin's Tech's photo

Nice one, keep them coming!

Nazanin Ashrafi's photo

Thank you Catalin 😍🙌🙌