new course
CSS grid landing page tutorial (36min)

Lesson info

Lesson info

With filters, you can apply unique visual effects to any element, from blurring to sepia tones. They’re also useful for creating interesting changes on hover states.Here we’ll be covering:

  1. Adding filters
  2. ‍Filter types
  3. ‍Hover effects using filters

Explore this project

Want to dig into the project featured in this video and see how everything is put together? We've included the full project we used when making this lesson, and we've shared the link right under this very paragraph.

View and clone this projectDownload lesson assets
Clone this projectDownload project assets


Filters give us control over visual effects that can apply to an element and its children. These are extremely useful for state changes, like having a greyscale image change to color — or for making groups of people look like aliens.

We're going to cover four things regarding filters: we'll do a quick overview of the filters available to us, we'll cover adding these filters, we'll cover adjusting these filters in state changes, and finally we'll touch upon adding transitions to smooth these state changes out.

Let's start with a quick overview. We have blur, which blurs; we have hue rotation, which shifts the hue; we have saturation, brightness and contrast; greyscale; sepia, for that nostalgic look; and invert.

Those are the filters we have. Let's cover using them in a project.

Now we can apply a filter just like we can style any class on any element anywhere. And we can do this directly on an image, for instance. But we can also add a filter on an element that has children.

So here are some link blocks. Each of these link blocks has the same class applied. If we select one of them and go down to add a filter, we have our options available here in the dropdown.

And here's Blur, so if we adjust our blur radius, we can control how blurry or clear our element (and its children) appear. We can go back to our dropdown and choose any of these — but for now we'll choose greyscale. And we can see that our link blocks (and their children) are effectively greyscale.

We can also work with multiple filters. Let's add another one on top of this. This time, from our dropdown, let's select Brightness. And again, we can drag to adjust the brightness level, and close out when it's just how we want it.

And both filters are set up like layers here. We can toggle visibility, or drag each of the layers around to change the order.

But that's adding filters. Let's do a state change.

With our link block still selected, we're styling the same class we were a moment ago. Let's go in and visit our Hover state. And since Hover inherits the properties from None (which is where we were styling before), our filters are exactly the same. Let's change our greyscale to 0%, effectively bringing the color back; and let's change our brightness back to 100%.

And on hover, when we hover over each of our link blocks? We see the effects in action.

That's adding a state change. And finally, let's add a transition to smooth this out.

Now you might be fine at this point with the cutting we're seeing between states. A transition will help to smooth this out. We're still in Hover, so let's switch over to None. And when we scroll down, let's add a transition.

From the dropdown, we need to select Filter. This will apply to any filter or filters we're changing between states. We can hover over and take a look (200 milliseconds looks fine). We can also change that duration (maybe 500 milliseconds), and see how that would look, too. We could also add a few more zeros, which will make the effect almost entirely indiscernible to those without the time to sit through this whole thing.

So. We've covered the different types of filters available to us, we went through adding filters, creating a state change between these filters, and adding a transition to smooth everything out.