In this tutorial we will look into an emerging CSS toy going by the name of Backdrop Filter.
The backdrop-filter proposal is heavily influenced by the Apple design language, particularly that frosty-transparent-blurry-background seen in their most recent iOS and macOS interfaces. You’ll have noticed it in the Dock, the Contextual Menu, and the Notification centre.

Backdrop filter is currently baked under CSS Filters Level 2, and at the time of the writing, it only works work in Safari 9 with the -webkit-
prefix, and Chrome as well as Opera by enabling the “Experimental Web Platform Features” under the chrome://flags
menu.

Using Backdrop Filter
Backdrop-filter is included as part of the CSS Filters specification and thus, similarly to the filter
property, it inherits all the familiar filtering functions such grayscale()
, blur()
, and sepia()
. The only difference here is that it will affect the elements underneath the selected element.
To use it, we will need at least two elements; the first element will be the target, while the second will lie underneath it. For example:
<div id="first-element" class="filter"></div><a id="second-element" href="https://example.com"><img src="images/name.jpg" alt=""></a>
Set a background in the first element with low opacity so we can add backdrop-filter
with a function, for example, grayscale()
to turn the backdrop black and white.
.filter { -webkit-backdrop-filter: blur(10px); /* Safari 9+ */ backdrop-filter: blur(10px); /* Chrome and Opera */ background-color: rgba(255, 255, 255, 0.3); }
Notice in the following demo that descendants of the .filter
elements (a button in this case) remain crisp despite the blur()
function addition. This is an advantage backdrop-filter
has over the filter
property; where all descendants are impacted.
Note: image here taken from tutorial How to Create a Little Red Riding Hood Inspired Fairytale Illustration in Paint Tool SAI.
Combining Multiple Filters
Combining two filter functions in a single declaration is also acceptable. For example, keeping our blur()
, but adding the grayscale()
function to strip the backdrop of color.
.filter { -webkit-backdrop-filter: grayscale() blur(10px); /* Safari 9+ */ backdrop-filter: grayscale() blur(10px); /* Chrome and Opera */ background-color: rgba(255, 255, 255, 0.3); }
Other functions you can add into the mix include:
brightness()
: accepting a number from 0 to infinity, or percentage. Any number below1
, e.g.0.8
, will darken the element, and specifying any number above1
will lighten the element.contrast()
: accepts a number and percentage which works similar to thebrightness()
function, except this function defines the element contrast.invert()
: this function generates the opposite or negative colors of the backdrop. Likewise, the function also accepts a number and percentage as the value.
Advanced Filter With SVG
If you can’t find the desired effect from these default functions, you can always add a more advanced filter through SVG. Create an SVG filter with a unique ID, and save it in an .svg
file:
<filter id="morph"><feMorphology id="morph-value" operator="erode" in="SourceGraphic" radius="3"/></filter>
Refer the filter with the url()
function, like so.
.filter { -webkit-backdrop-filter: url(../images/filter.svg#morph); /* Safari 9 */ backdrop-filter: url(../images/filter.svg#morph); /* Chrome and Opera */ }
Unfortunately, adding filter with the url()
function does not seem to work in any browser at the persent time. But once properly implemented, the image should look like this.

What to Build?
There are a number of practical implementations on the web where we could apply backdrop filters in a more meaningful way than just being a garnish. One good example is Medium, which blurs the post image cover as well as images within the post content before the image is fully loaded.

Another great real-world example is Facebook, which blurs images with mature, inappropriate, or disturbing content, before users have consented to viewing the image in full.

Conclusion
Over the years, CSS has been enhanced with new specifications that enable designers to build more compelling interfaces on the web. Transforms, transitions, and animations have all played their part, and now Backdrop Filters are coming our way too.
Although it maybe too early to use backdrop-filter in production, these demos show that we will soon be able to apply filter effects to elements in a more simplified way and ultimately less reliant on heavy JavaScript or Canvas libraries. Until then, follow the Webkit Blog for updates on this and other projects.
Further Resources
- Backdrop Filter Draft: W3C Draft
- Backdrop Filter Browser Support
- Backdrop Filter Pens on CodePen