filter (CSS) en CSS : flou, contraste et niveaux de gris en une ligne

La propriété filter applique blur, brightness, contrast ou grayscale à un élément, à ne pas confondre avec le <filter> SVG.
4 min de lecture
Believemy logo

Flouter une image, l'assombrir légèrement au survol, la passer en noir et blanc : ce sont des réglages qu'on associe naturellement à un logiciel de retouche photo. filter les applique en une seule ligne, directement dans le navigateur, sans jamais toucher au fichier image d'origine.

Le nom prête toutefois à confusion avec un mécanisme SVG bien plus ancien et bien plus verbeux, qui porte exactement le même nom.


Définition

filter applique un ou plusieurs effets visuels au rendu d'un élément, texte et enfants compris, sans modifier la mise en page ni le fichier source. Sa valeur par défaut est none. Chaque effet est une fonction, et plusieurs fonctions peuvent être combinées en les séparant par un espace dans une seule déclaration.

CSS
.photo-souvenir {
  filter: grayscale(100%);
  transition: filter 0.3s ease;
}

.photo-souvenir:hover {
  filter: grayscale(0%);
}


Les fonctions les plus utilisées

Chaque fonction règle un aspect précis du rendu, presque toujours avec un pourcentage ou une unité de longueur en argument.

FonctionEffet
blur(8px)Floute le rendu sur la distance donnée
brightness(150%)Éclaircit ou assombrit (100% est neutre)
contrast(120%)Accentue ou réduit l'écart entre tons clairs et sombres
grayscale(100%)Retire progressivement la saturation des couleurs
drop-shadow(0 4px 6px rgba(0,0,0,0.3))Ombre portée qui épouse la forme réelle, y compris la transparence


Cumuler plusieurs filtres

Plusieurs fonctions se combinent dans une seule déclaration, appliquées dans l'ordre où elles sont écrites : chaque fonction reçoit le résultat déjà transformé par la précédente. Sur des filtres comme brightness() et contrast(), l'ordre peut légèrement changer le rendu final, ce qui vaut la peine d'être testé visuellement plutôt que supposé.

CSS
.miniature-desaturee {
  filter: grayscale(60%) brightness(110%) contrast(105%);
}
Bon à savoirblur() en particulier sollicite fortement le processeur graphique, surtout sur un grand élément ou sur de nombreux éléments animés en même temps. Sur une liste défilante avec beaucoup de vignettes, préférez un flou léger, testez sur un appareil mobile réel, et pensez à will-change si l'effet est destiné à être animé.


hue-rotate() pour une palette dynamique

hue-rotate(180deg) fait pivoter toutes les teintes d'une image ou d'un dégradé autour du cercle chromatique, sans toucher à leur luminosité ni à leur saturation. C'est une technique rapide pour décliner un même visuel en plusieurs variantes de couleur, par exemple pour illustrer différentes catégories d'un même produit sans stocker une image distincte par couleur. Le résultat reste approximatif comparé à une véritable retouche fichier par fichier, mais suffit largement pour un badge de statut ou une icône réutilisée dans plusieurs contextes d'une même interface.


filter (CSS) contre <filter> SVG

Le SVG dispose de son propre système de filtres, bâti sur des primitives comme feGaussianBlur ou feColorMatrix, déclarées dans un bloc <filter> à l'intérieur de <defs>, puis appliquées avec l'attribut filter="url(#monFiltre)" sur un élément SVG. C'est un outil beaucoup plus puissant, capable de combinaisons sur mesure impossibles à obtenir avec les fonctions CSS toutes faites, mais bien plus long à écrire pour un simple flou ou un simple noir et blanc. La propriété CSS filter peut d'ailleurs référencer un filtre SVG personnalisé de cette façon : filter: url(#monFiltre), ce qui permet de combiner la simplicité des fonctions CSS avec la puissance du système SVG quand c'est nécessaire.


Questions fréquentes

Questionfilter fonctionne-t-il uniquement sur des images ?

Non, il s'applique à n'importe quel élément, texte, boîte colorée ou vidéo compris, puisqu'il agit sur le rendu final plutôt que sur un type de contenu précis. Un titre entier peut par exemple recevoir un drop-shadow() sans jamais toucher à box-shadow.

QuestionPeut-on animer un filtre avec transition ?

Oui, et c'est l'un des usages les plus fréquents de la propriété : passer de grayscale(100%) à grayscale(0%) au survol, avec une transition déclarée sur filter, produit un effet de couleur qui revient progressivement, très utilisé sur des galeries d'images.

QuestionLe filter CSS et le mix-blend-mode font-ils la même chose ?

Non, ils répondent à des questions différentes. filter transforme le rendu de l'élément lui-même, indépendamment de ce qu'il y a derrière. mix-blend-mode mélange au contraire cet élément avec ce qui se trouve derrière lui, ce qui en fait un outil complémentaire plutôt qu'un substitut.

Termes connexes

Découvrez notre glossaire HTML et CSS

Parcourez les termes et définitions les plus couramment utilisés dans le domaine du développement HTML et CSS.

Partager cet article

Tu veux nous aider ? Fais un lien vers cet article sur tes réseaux ou encore mieux : sur ton site, dans un article ou dans ta newsletter.