In CSS, I use the backdrop-filter
property to blur the background of the sticky header.
Therefore, I used backdrop-filer:blur(10px)
and set opacity:50%
.
If you run the code, the sticky header background will not blur. Can you tell me why the sample code doesn't work?
.sticky{
background-color:orangered;
opacity: 50%;
backdrop-filter: blur(10px);
position: sticky;
top:0;
height: 100px;
}
<body>
<div >
<h1>This is a header</h1>
</div>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aperiam
asperiores at autem, dicta dignissimos ex, fugiat fugit harum id itaque
nulla odio perferendis quasi qui similique! Doloribus nesciunt quaerat
tempora.
</p>
<div style="height: 400px"></div>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aperiam
asperiores at autem, dicta dignissimos ex, fugiat fugit harum id itaque
nulla odio perferendis quasi qui similique! Doloribus nesciunt quaerat
tempora.
</p>
<div style="height: 400px"></div>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aperiam
asperiores at autem, dicta dignissimos ex, fugiat fugit harum id itaque
nulla odio perferendis quasi qui similique! Doloribus nesciunt quaerat
tempora.
</p>
<div style="height: 400px"></div>
</body>
CodePudding user response:
- Chrome does support
background-filter
. https://caniuse.com/?search=backdrop-filter (however Firefox currently does not). background-filter
does not work in conjunction withbackground-color
.- You cannot see a blur effect if there is no background to blur. A blurred solid colour would look exactly the same!
- I recommend also removing opacity.
If you want to change the backgroiund color, try using:
- backdrop-filter: sepia(.8);
- backdrop-filter: hue-rotate(30deg);
to get the desired efffect.
body {
background: url(https://external-content.duckduckgo.com/iu/?u=https://images8.alphacoders.com/992/992848.jpg);
background-size: contain;
}
@supports ((-webkit-backdrop-filter: none) or (backdrop-filter: none)) {
.sticky {
backdrop-filter: blur(10px);
position: sticky;
top: 0;
height: 100px;
}
}
<body>
<div >
<h1>This is a header</h1>
</div>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aperiam asperiores at autem, dicta dignissimos ex, fugiat fugit harum id itaque nulla odio perferendis quasi qui similique! Doloribus nesciunt quaerat tempora.
</p>
<div style="height: 400px"></div>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aperiam asperiores at autem, dicta dignissimos ex, fugiat fugit harum id itaque nulla odio perferendis quasi qui similique! Doloribus nesciunt quaerat tempora.
</p>
<div style="height: 400px"></div>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aperiam asperiores at autem, dicta dignissimos ex, fugiat fugit harum id itaque nulla odio perferendis quasi qui similique! Doloribus nesciunt quaerat tempora.
</p>
<div style="height: 400px"></div>
</body>
CodePudding user response:
Try directly state opacity using RGBA in the background-color
, it will work:
.sticky{
background-color:rgba(255,69,0,0.5); //orangered = rgb(255,69,0)
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px); //mobile-friendly
position: sticky;
top:0;
height: 100px;
}
<body>
<div >
<h1>This is a header</h1>
</div>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aperiam
asperiores at autem, dicta dignissimos ex, fugiat fugit harum id itaque
nulla odio perferendis quasi qui similique! Doloribus nesciunt quaerat
tempora.
</p>
<div style="height: 400px"></div>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aperiam
asperiores at autem, dicta dignissimos ex, fugiat fugit harum id itaque
nulla odio perferendis quasi qui similique! Doloribus nesciunt quaerat
tempora.
</p>
<div style="height: 400px"></div>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aperiam
asperiores at autem, dicta dignissimos ex, fugiat fugit harum id itaque
nulla odio perferendis quasi qui similique! Doloribus nesciunt quaerat
tempora.
</p>
<div style="height: 400px"></div>
</body>
CodePudding user response:
background-filter does not work in conjunction with background-color.
.sticky{
background-color:#3ea66263;
backdrop-filter: blur(10px);
position: sticky;
top:0;
height: 100px;
}
Works well for me. Did I miss something ?