Cette fonction est expérimentale
Puisque cette fonction est toujours en développement dans certains navigateurs, veuillez consulter le tableau de compatibilité pour les préfixes à utiliser selon les navigateurs.
Il convient de noter qu'une fonctionnalité expérimentale peut voir sa syntaxe ou son comportement modifié dans le futur en fonction des évolutions de la spécification.

La propriété filter permet d'appliquer des filtres et d'obtenir des effets graphiques de flou, de saturation, etc. Les filtres sont généralement utilisés pour ajuster le rendu d'une image, d'un arrière-plan ou des bordures.

Plusieurs fonctions sont inclues dans le standard CSS et permettent d'obtenir des effets prédéfinis. Il est également possible d'utiliser un filtre SVG via une URL référençant un élément SVG filter.

Valeur initialenone
Applicabilitétous les éléments ; en SVG, cela s'applique aux éléments conteneurs à l'exception des éléments defs et des éléments graphiques
Héritéenon
Médiavisuel
Valeur calculéecomme spécifié
Animableoui
Ordre canoniquel'ordre unique et non-ambigu défini par la grammaire formelle

Syntaxe

filter: url("filters.svg#filter-id");
filter: blur(5px);
filter: brightness(0.4);
filter: contrast(200%);
filter: drop-shadow(16px 16px 20px blue);
filter: grayscale(50%);
filter: hue-rotate(90deg);
filter: invert(75%);
filter: opacity(25%);
filter: saturate(30%);
filter: sepia(60%);

/* On applique plusieurs filtres */
filter: contrast(175%) brightness(3%);

/* Valeurs globales */
filter: inherit;
filter: initial;
filter: unset;

Avec une fonction, on utilisera la forme suivante :

filter: <filter-function> [<filter-function>]* | none

En utilisant un élément SVG <filter>, on utilisera la forme suivante :

filter: url(file.svg#filter-element-id) 

Syntaxe formelle

none | <filter-function-list>


<filter-function-list> = [ <filter-function> | <url> ]+


<filter-function> = <blur()> | <brightness()> | <contrast()> | <drop-shadow()> | <grayscale()> | <hue-rotate()> | <invert()> | <opacity()> | <sepia()> | <saturate()>


<blur()> = blur( <length> )
<brightness()> = brightness( [ <number> | <percentage> ] )
<contrast()> = contrast( [ <number> | <percentage> ] )
<drop-shadow()> = drop-shadow( <length>{2,3} <color>? )
<grayscale()> = grayscale( [ <number> | <percentage> ] )
<hue-rotate()> = hue-rotate( <angle> )
<invert()> = invert( [ <number> | <percentage> ] )
<opacity()> = opacity( [ <number> | <percentage> ] )
<sepia()> = sepia( [ <number> | <percentage> ] )
<saturate()> = saturate( [ <number> | <percentage> ] )


<color> = <rgb()> | <rgba()> | <hsl()> | <hsla()> | <hex-color> | <named-color> | currentcolor | <deprecated-system-color>


<rgb()> = rgb( <rgb-component>#{3} )
<rgba()> = rgba( <rgb-component>#{3} , <alpha-value> )
<hsl()> = hsl( <hue>, <percentage>, <percentage> )
<hsla()> = hsla( <hue>, <percentage>, <percentage>, <alpha-value> )
<named-color> = <ident>
<deprecated-system-color> = ActiveBorder | ActiveCaption | AppWorkspace | Background | ButtonFace | ButtonHighlight | ButtonShadow | ButtonText | CaptionText | GrayText | Highlight | HighlightText | InactiveBorder | InactiveCaption | InactiveCaptionText | InfoBackground | InfoText | Menu | MenuText | Scrollbar | ThreeDDarkShadow | ThreeDFace | ThreeDHighlight | ThreeDLightShadow | ThreeDShadow | Window | WindowFrame | WindowText


<rgb-component> = <integer> | <percentage>
<alpha-value> = <number>
<hue> = <number>

Exemples

Voici un rapide exemple de filtre fonctionnel. Chaque fonction est illustrée en détail par la suite.

.mydiv { filter: grayscale(50%) }

/* on applique un niveau de gris à 50% */
/* et un flou dont le rayon vaut 10px  */
img {
  filter: grayscale(0.5) blur(10px);
}

Voici un rapide exemple de filtre utilisant une ressource SVG :

.target { filter: url(#c1); }

.mydiv { filter: url(commonfilters.xml#large-blur) }

Fonctions prédéfinies

Pour utiliser la propriété CSS filter, on utilisera une ou plusieurs des fonctions listées ci-après avec, pour chacune, un argument. Si la valeur est invalide, la fonction renverra none. Sauf mention contraire, les fonctions qui acceptent des valeurs exprimées en pourcentages (34%) acceptent également des valeurs décimales (0.34).

url()

La fonction url() prend comme argument l'emplacement d'un fichier XML qui définit le filtre SVG à appliquer. L'URL peut faire référence à une ancre d'un élément spécifique.

filter: url(resources.svg#c1)

blur()

Cette fonction applique un flou gaussien à l'image d'entrée. La valeur du paramètre correspond au rayon de flou (l'écart-type de la gaussienne) utilisé. Plus la valeur est importante, plus le flou sera prononcé. La valeur par défaut du paramètre est 0. Selon la spécification, le paramètre est une valeur de type <length> mais la fonction n'accepte pas de valeurs exprimées en pourcentages.

filter: blur(5px)
<svg style="position: absolute; top: -99999px" xmlns="http://www.w3.org/2000/svg">
  <filter id="svgBlur" x="-5%" y="-5%" width="110%" height="110%">
    <feGaussianBlur in="SourceGraphic" stdDeviation="5"/>
  </filter>
</svg>

brightness()

La fonction permet de modifier la luminosité d'une image grâce à un facteur linéaire. Un argument égal 0% créera une image totalement noire et une valeur de 100% conservera l'image d'entrée telle quelle. Il est possible d'utiliser des valeurs supérieures à 100% afin d'obtenir des images saturées en luminosité. La valeur par défaut pour l'argument est 1.

filter: brightness(0.5)
<svg style="position: absolute; top: -99999px" xmlns="http://www.w3.org/2000/svg">
 <filter id="brightness">
    <feComponentTransfer>
        <feFuncR type="linear" slope="[amount]"/>
        <feFuncG type="linear" slope="[amount]"/>
        <feFuncB type="linear" slope="[amount]"/>
    </feComponentTransfer>
  </filter>
</svg>

contrast()

Cette fonction permet d'ajuster le contraste de l'image d'entrée. Une valeur de 0% créera une image entièrement grise. Une valeur de 100% conservera l'image d'entrée telle quelle. Il est possible d'utiliser des valeurs supérieures à 100% pour augmenter le contraste. La valeur par défaut de l'argument est 1.

filter: contrast(200%)
<svg style="position: absolute; top: -99999px" xmlns="http://www.w3.org/2000/svg">
  <filter id="contrast">
    <feComponentTransfer>
      <feFuncR type="linear" slope="[amount]" intercept="-(0.5 * [amount]) + 0.5"/>
      <feFuncG type="linear" slope="[amount]" intercept="-(0.5 * [amount]) + 0.5"/>
      <feFuncB type="linear" slope="[amount]" intercept="-(0.5 * [amount]) + 0.5"/>
    </feComponentTransfer>
  </filter>
</svg>

drop-shadow()

Cette fonction permet d'appliquer une ombre portée à l'image d'entrée. Une ombre portée est une version décalée, dans une couleur donnée, du canal alpha de l'image qui est affiché sous celle-ci. La fonction peut accepter une valeur de type <shadow> (définie dans la spécification CSS3 sur les arrière-plans), une exception : le mot-clé inset n'est pas autorisée. Cette fonction est semblable à la propriété box-shadow plus répandue ; seule différence : les navigateurs utilisent parfois l'accélération matérielle pour les filtres ce qui peut permettre d'obtenir de meilleurs performances. Les paramètres de l'argument <shadow> sont les suivants :

<offset-x> <offset-y> (nécessaire)
Deux valeurs <length> qui indiquent le décalage de l'ombre portée. <offset-x> définit la distance horizontale : des valeurs négatives décaleront l'ombre à gauche de l'élément. <offset-y> définit la distance verticale : des valeurs négatives décaleront l'ombre au-dessus de l'élément. Se référer à la page <length> pour les différentes unités utilisables.
Si les deux valeurs sont nulles, l'ombre sera exactement placée sous l'élément (et pourra servir à générer un effet de flou si <blur-radius> et/ou <spread-radius> sont utilisés).
<blur-radius> (optionnel)
Une troisième valeur de type <length>. Plus la valeur sera grande, plus le flou sera important (l'ombre sera plus grande et moins prononcée). Les valeurs négatives ne sont pas autorisée. La valeur par défaut est 0, le bord de l'ombre sera droit.
<spread-radius> (optionnel)
Un quatrième valeur de type <length>. Des valeurs positives agrandiront l'ombre et les valeurs négatives réduiront l'ombre. La valeur par défaut est 0 (l'ombre aura la même taille que l'élément). 
Note: Webkit, and maybe other browsers, do not support this 4th length; it will not render if added.
<color> (optionnel)
Voir <color> pour les mots-clés et notations possibles. Si ce paramètre n'est pas défini, la couleur choisie dépendra du navigateur. Pour Gecko (Firefox), Presto (Opera) et Trident (Internet Explorer), la valeur de la propriété color est utilisée. Pour WebKit, si la couleur est absente, l'ombre sera transparente (donc inutile).
filter: drop-shadow(16px 16px 10px black)
<svg style="position: absolute; top: -999999px" xmlns="http://www.w3.org/2000/svg">
 <filter id="drop-shadow">
    <feGaussianBlur in="SourceAlpha" stdDeviation="[radius]"/>
    <feOffset dx="[offset-x]" dy="[offset-y]" result="offsetblur"/>
    <feFlood flood-color="[color]"/>
    <feComposite in2="offsetblur" operator="in"/>
    <feMerge>
      <feMergeNode/>
      <feMergeNode in="SourceGraphic"/>
    </feMerge>
  </filter>
</svg>

grayscale()

L'image d'entrée est convertie en niveau de gris. La valeur de l'argument définit la force de cette conversion. En utilisant une valeur de 100% sera complètement en niveaux de gris. 0% conservera l'image telle quelle. La valeur par défaut du paramètre est 0.

filter: grayscale(100%)

hue-rotate()

Cette fonction applique une rotation de teinte à l'image d'entrée. La valeur de l'angle passé en argument définit le nombre de degrés parcouru sur le cercle des couleurs. Une valeur de 0deg conservera l'image telle quelle. La valeur par défaut du paramètre est 0deg. Il n'y a pas de valeur maximale pour l'argument, si une valeur supérieure à 360deg est utilisée, ce sera la mesure de l'angle correspondante qui sera utilisée.

filter: hue-rotate(90deg)
<svg style="position: absolute; top: -999999px" xmlns="http://www.w3.org/2000/svg">
  <filter id="svgHueRotate" >
    <feColorMatrix type="hueRotate" values="[angle]" />
  <filter />
</svg>

invert()

Cette fonction permet d'inverser les couleurs de l'image d'entrée. La valeur de l'argument définit la force de cette inversion. Une valeur de 100% inversera complètement les couleurs (tel un négatif) et une valeur 0% conservera l'image d'entrée telle quelle. La valeur par défaut de l'argument est 0.

filter: invert(100%)

opacity()

Cette fonction permet de régler l'opacité de l'image d'entrée. La valeur de l'argument indique la force de l'opacité. Ainsi, une valeur de 0% rendra l'image complètement transparente et une valeur de 100% conservera l'image telle quelle. Les valeurs intermédiaires appliqueront des effets proportionnels. La valeur par défaut de l'argument est 1. Cette fonction est proche de la propriété opacity, toutefois, avec les filtres, certains navigateurs utilisent l'accélération matérielle, ce qui permet d'obtenir de meilleures performances.

filter: opacity(50%)

saturate()

L'image d'entrée est saturée. La valeur de l'argument indique la force de la saturation. Une valeur de 0% fera que l'image sera totalement plate et une valeur de 100% conservera l'image d'entrée telle quelle. Les valeurs intermédiaires auront un effet linéaire. Il est possible d'utiliser des valeurs supérieures à 100% pour obtenir un effet de sursaturation. La valeur par défaut de l'argument est 1.

filter: saturate(200%)

sepia()

L'image d'entrée est convertie en sépia. La valeur de l'argument définit la proportion de la conversion. Ainsi, si on utilise un argument égal à 100%, le résultat sera entièrement sépia et si on utilise une valeur de 0%, l'image d'entrée sera inchangée. Les valeurs comprises entre 0% et 100% appliquent l'effet de façon linéaire. La valeur par défaut de l'argument est 0.

filter: sepia(100%)

Enchaîner les fonctions

On peut appliquer autant de fonction que nécessaire pour manipuler le rendu obtenu. Dans l'exemple suivant, on augmente le contraste et la luminosité de l'image :

filter: contrast(175%) brightness(103%)

Spécifications

Spécification État Commentaires
Filter Effects Module Level 1
La définition de 'filter' dans cette spécification.
Version de travail Définition initiale.

Compatibilité des navigateurs

Fonctionnalité Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Support simple 18.0-webkit[1] 35 (35)[2] Pas de support[3] 15.0-webkit 6.0-webkit
Support pour les éléments SVG Pas de support[4] 35 (35) Pas de support Pas de support Pas de support
Fonctionnalité Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Support simple 4.4-webkit 35 (35)[2] Pas de support 22.0 (Oui)-webkit

6.0 (Oui)-webkit

Support pour les éléments SVG Pas de support[4] 35 (35) Pas de support Pas de support Pas de support

[1] Pour Chrome 18 et 19, saturate() n'accepte que des valeurs entières (pas de valeurs décimales ou de pourcentages). Ce bug est corrigé à partir de Chrome 20.

[2] Avant Firefox 34, Gecko n'implémentait que la fonction url() pour la propriété filter. L'enchaînement des fonction n'était pas implémenté et seule une seule url() était autorisée. Les valeurs fonctionnelles de filter sont activées par la préférence layout.css.filters.enabled (disponible à partir de Firefox 34 pour lequel la préférence était désactivée par défaut).

[3] Les versions d'Internet Explorer 4.0 à 9.0 implémentait une version non-standard de la propriété filter avec une syntaxe complètement différente et qui n'est pas documentée ici.

[4] À l'heure actuelle, Blink n'implémente pas cette fonctionnalité (cf. bug 109224).

Voir aussi

Étiquettes et contributeurs liés au document

Étiquettes : 
 Contributeurs à cette page : SphinxKnight, Sebastianz, Prinz_Rana, teoli, emersion, wakka27, flexbox, FredB, thenew
 Dernière mise à jour par : SphinxKnight,