Grow your CSS skills. Land your dream job.

filter

Last updated on:

CSS Filters are a powerful tool that authors can use to achieve varying visual effects (sort of like Photoshop filters for the browser). The CSS filter property provides access to effects like blur or color shifting on an element’s rendering before the element is displayed. Filters are commonly used to adjust the rendering of an image, a background, or a border.

The syntax is:

.filter-me {
  filter: <filter-function> [<filter-function>]* | none
}

Where is one of:

  • blur()
  • brightness()
  • contrast()
  • url()
  • drop-shadow()
  • grayscale()
  • hue-rotate()
  • invert()
  • opacity()
  • sepia()
  • custom() - "coming soon"

Multiple functions can be used, space separated.

Example of a single filter being used:

.blur-me {
  filter: blur(20px);
}

Example of multiple filters being used:

.do-more-things {
  filter: blur(20px) grayscale(20%);
}

Filter Functions

To use the CSS filter property, you specify a value for one of the following functions listed above. If the value is invalid, the function returns "none." Except where noted, the functions that take a value expressed with a percent sign (as in 34%) also accept the value expressed as decimal (as in 0.34).

Below we'll use a variety of different filter functions on this image:

grayscale()

grayscale([ <number> | <percentage> ])

Converts the input image to grayscale. The value of “amount” defines the proportion of the conversion. A value of 100% is completely grayscale. A value of 0% leaves the input unchanged. Values between 0% and 100% are linear multipliers on the effect. If the “amount” parameter is missing, a value of 100% is used. Negative values are not allowed.

See the Pen e995629e85ffd4b34ab2e4317a1d6c66 by Dennis Gaebel (@grayghostvisuals) on CodePen.

sepia()

sepia([ <number> | <percentage> ])

Converts the input image to sepia. The value of “amount” defines the proportion of the conversion. A value of 100% is completely sepia. A value of 0 leaves the input unchanged. Values between 0% and 100% are linear multipliers on the effect. If the “amount” parameter is missing, a value of 100% is used. Negative values are not allowed.

See the Pen 855cee498f4310a411f18273897b2355 by Dennis Gaebel (@grayghostvisuals) on CodePen.

saturate()

saturate([ <number> | <percentage> ])

Saturates the input image. The value of “amount” defines the proportion of the conversion. A value of 0% is completely un-saturated. A value of 100% leaves the input unchanged. Other values are linear multipliers on the effect. Values of amount over 100% are allowed, providing super-saturated results. If the “amount” parameter is missing, a value of 100% is used. Negative values are not allowed.

See the Pen Saturate Filter by Dennis Gaebel (@grayghostvisuals) on CodePen.

hue-rotate()

hue-rotate(<angle>)

Applies a hue rotation on the input image. The value of “angle” defines the number of degrees around the color circle the input samples will be adjusted. A value of 0deg leaves the input unchanged. If the “angle” parameter is missing, a value of 0deg is used. Maximum value is 360deg.

See the Pen Hue-Rotate Filter by Dennis Gaebel (@grayghostvisuals) on CodePen.

invert()

invert([ <number> | <percentage> ])

Inverts the samples in the input image. The value of “amount” defines the proportion of the conversion. A value of 100% is completely inverted. A value of 0% leaves the input unchanged. Values between 0% and 100% are linear multipliers on the effect. If the “amount” parameter is missing, a value of 100% is used. Negative values are not allowed.

See the Pen Invert Filter by Dennis Gaebel (@grayghostvisuals) on CodePen.

opacity()

opacity([ <number> | <percentage> ])

Applies transparency to the samples in the input image. The value of “amount” defines the proportion of the conversion. A value of 0% is completely transparent. A value of 100% leaves the input unchanged. Values between 0% and 100% are linear multipliers on the effect. This is equivalent to multiplying the input image samples by amount. If the “amount” parameter is missing, a value of 100% is used. This function is similar to the more established opacity property; the difference is that with filters, some browsers provide hardware acceleration for better performance. Negative values are not allowed.

See the Pen Invert Filter by Dennis Gaebel (@grayghostvisuals) on CodePen.

brightness()

brightness([ <number> | <percentage> ])

Applies a linear multiplier to input image, making it appear more or less bright. A value of 0% will create an image that is completely black. A value of 100% leaves the input unchanged. Other values are linear multipliers on the effect. Values of an amount over 100% are allowed, providing brighter results. If the “amount” parameter is missing, a value of 100% is used.

See the Pen Brightness Filter by Dennis Gaebel (@grayghostvisuals) on CodePen.

contrast()

contrast([ <number> | <percentage> ])

Adjusts the contrast of the input. A value of 0% will create an image that is completely black. A value of 100% leaves the input unchanged. Values of amount over 100% are allowed, providing results with less contrast. If the “amount” parameter is missing, a value of 100% is used.

See the Pen Contrast Filter by Dennis Gaebel (@grayghostvisuals) on CodePen.

blur()

blur(<length>)

Applies a Gaussian blur to the input image. The value of ‘radius’ defines the value of the standard deviation to the Gaussian function, or how many pixels on the screen blend into each other, so a larger value will create more blur. If no parameter is provided, then a value 0 is used. The parameter is specified as a CSS length, but does not accept percentage values.

See the Pen Blur Filter by Dennis Gaebel (@grayghostvisuals) on CodePen.

drop-shadow()

drop-shadow(<length>{2,3} <color>?)

Applies a drop shadow effect to the input image. A drop shadow is effectively a blurred, offset version of the input image's alpha mask drawn in a particular color, composited below the image. The function accepts a parameter of type (defined in CSS3 Backgrounds), with the exception that the ‘inset’ keyword is not allowed.

This function is similar to the more established box-shadow property; the difference is that with filters, some browsers provide hardware acceleration for better performance.

See the Pen Drop-Shadow Filter by Dennis Gaebel (@grayghostvisuals) on CodePen.

Drop-shadow also mimics the intended objects outline naturally unlike box-shadow that treats only the box as its path.

See the Pen Drop-shadow vs box-shadow (2) by Kseso (@Kseso) on CodePen.

url()

url(<url>)

The url() function takes the location of an XML file that specifies an SVG filter, and may include an anchor to a specific filter element.

See the Pen URL Filter by Dennis Gaebel (@grayghostvisuals) on CodePen.

Animating Filters

Since Filters are animatable it can open the doors for a whole bunch of fun.

See the Pen Filter Animation by Dennis Gaebel (@grayghostvisuals) on CodePen.

Notes

You may combine any number of functions to manipulate the rendering, but
order still matters (i.e. sepia() before grayscale() otherwise using grayscale() before sepia() will result in only grayscale as the output).

A computed value of other than “none” results in the creation of a stacking context the same way that CSS opacity does. The filter property has no effect on the geometry of the target element’s box model, even though filters can cause painting outside of an element’s border box. Any parts of the target element are affected by filter functions. This includes any content, background, borders, text decoration, outline and visible scrolling mechanism of the element to which the filter is applied, and those of its descendants. Filters can also be applied to background images along with inline content.

The IE proprietary filter stuff

Also used the filter property, like:

.half-opacity {
  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
  filter: alpha(opacity=50);
}

Mostly used for opacity when you needed to support IE 8 and down.

More Information

Browser Support

Chrome Safari Firefox Opera IE Android iOS
31+ (-webkit-) 7+ (-webkit-) nope 18+ (-webkit-) nope 4.4+ (-webkit-) 6+ (-webkit-)

Comments

  1. I am so amazed with the work of you people.

    I live in India and i had just started my web designing carrier so there are many things which i don’t know and I always need help on that and every time i search for a thins which i don’t know i found it on this website.

    Thanks Thanks Thanks for your great work.

    This website is doing amazing thing for all the people who cant afford to get costly online education and lave lack of tome and resources mainly i don’t have time,money, and mostly resources too but with the help of services like this i am approaching to goog web Designer carrier.

    If your website need any help i am there to support you

    My mail id atulc007@gmail.com
    Facebook striker.a.a.a

    Keep up your Amazing work

    :)

  2. Limchilwe
    Permalink to comment#

    Thanks for the tutorial.

    I noticed that the table said that firefox isn’t supported.

    I’ve come across this:”-webkit-filter: blur(20px);”. Wouldn’t the effect then work in firefox?

    • Marc
      Permalink to comment#

      -webkit- only affects Chrome, Opera (15+) and Safari. You can do filter stuff in Firefox with svg though.

  3. Hi, using this article and the explication in spanish for @kseso i made this demo: http://codepen.io/g3kdigital/pen/cxCvu i show how to change the color of the tag using only css and filters, but only working in -webkit- for now. Cheers.

  4. Lucas
    Permalink to comment#

    Found that you wrote:

    Where is one of:

    Checked source code, you got wrapped around it.

    Anyways just saying :D

  5. for firefox you just have to change -webkit with -moz

    example :

    -moz-filter:grayscale(1);-webkit-filter:grayscale(1);

    For your Reference (CMIIW) css prefixs:

    -khtml- (Konqueror, really old Safari)
    -moz- (Firefox)
    -o- (Opera)
    -ms- (Internet Explorer)
    -webkit- (Safari, Chrome)

Leave a Comment

Posting Code

  • Use Markdown, and it will escape the code for you, like `<div class="cool">`.
  • Use triple-backticks for blocks of code.
    ``` 
    <div>
      <h1>multi-line block of code</h1>
      <span>be cool yo.</span>
    </div>
    ```
  • Otherwise, escape your code, like <code>&lt;div class="cool"&gt;</code>. Markdown is just easier though.

Current ye@r *

*May or may not contain any actual "CSS" or "Tricks".