CSS: Workaround to backdrop-filter?
As of Chrome M76, backdrop-filter is now shipped, unprefixed, and without a needed flag.
https://web.dev/backdrop-filter/
NOTE: (since this answer keeps getting downvoted because Mozilla hasn’t yet shipped it): this feature is available in Safari, Chrome, and Edge, but not yet in Firefox. Mozilla is planning to ship it very soon, but hasn’t yet. So this answer doesn’t contain a “workaround” but simply more information about which browsers require a workaround. Which still seems like useful information.
I use this to get the popular frosted glass effect. Until someone successfully invents a good polyfill for backdrop-filter
I'm using a slightly transparent background as a fallback:
/* slightly transparent fallback */
.backdrop-blur {
background-color: rgba(255, 255, 255, .9);
}
/* if backdrop support: very transparent and blurred */
@supports ((-webkit-backdrop-filter: none) or (backdrop-filter: none)) {
.backdrop-blur {
background-color: rgba(255, 255, 255, .5);
-webkit-backdrop-filter: blur(2em);
backdrop-filter: blur(2em);
}
}
The filter will work in currently supported browsers. (Safari and Chrome with experimental Web Platform features enabled) The code should also work in future browsers that support unprefixed backdrop-filter
if the spec doesn't change before that.
Examples without and with backdrop-filter support:
Update as of 5/01/22:
Backdrop Filter has received further support, check the link for the versions of each browser that support it and a quick tutorial.
Syntax:
.element {
backdrop-filter: <filter-function> [<filter-function>]* | none
}
Older Solution
I don't know if you're still chasing this question, but for other users in future:
This effect can be accomplished as follows with CSS Pseudo-Classes, no JavaScript is necessary! shown below:
body,
main::before {
background: url(https://s3-us-west-2.amazonaws.com/s.cdpn.io/80625/tree.jpg) 0 / cover fixed;
}
main {
margin: 100px auto;
position: relative;
padding: 10px 5px;
background: hsla(0, 0%, 100%, .3);
font-size: 20px;
font-family: 'Lora', serif;
line-height: 1.5;
border-radius: 10px;
width: 60%;
box-shadow: 5px 3px 30px black;
overflow: hidden;
}
main::before {
content: '';
margin: -35px;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
filter: blur(20px);
z-index: -1;
}
<main>
<blockquote>"The more often we see the things around us - even the beautiful and wonderful things - the more they become invisible to us. That is why we often take for granted the beauty of this world: the flowers, the trees, the birds, the clouds -
even those we love. Because we see things so often, we see them less and less."
<footer>—
<cite>
Joseph B. Wirthlin
</cite>
</footer>
</blockquote>
</main>
Live example can be seen on Codepen: https://codepen.io/jonitrythall/pen/GJQBOp
Quick Note:
Depending on the structure of your HTML document, your z-indexes may be different to the one described in the example.