Menu

Flou et filter en CSS : blur(), grayscale, brightness

filter: blur(5px) floute un élément, et backdrop-filter: blur() floute ce qui se trouve derrière lui. Découvrez toutes les fonctions de filtre (brightness, contrast, grayscale, sepia, saturate, hue-rotate, invert, drop-shadow) avec des curseurs en direct, comment les combiner, et le problème des bords flous.

Cette page contient des éditeurs exécutables - modifiez, exécutez et voyez la sortie instantanément.

Flouter un élément

filter: blur() prend une longueur, le rayon du flou. Plus il est grand, plus l'élément est flou :

filter fonctionne sur n'importe quel élément, pas seulement les images : une div floutée floute aussi son texte, sa bordure et ses enfants. Remarquez les bords doux des images floutées : le flou étale l'image vers l'extérieur et la mélange avec la zone transparente qui l'entoure. La solution se trouve plus bas, dans « Le problème des bords flous ».

Flouter le fond : backdrop-filter

Pour flouter ce qui se trouve derrière un élément (un panneau en verre dépoli sur une photo ou une page), utilisez backdrop-filter. Le contenu de l'élément reste net. Il faut un fond transparent pour voir le flou :

Les rayures et les cercles sont nets autour du panneau et flous derrière lui, tandis que le texte du panneau n'est pas touché. Gardez le texte lisible : une teinte plus claire ou plus foncée dans la couleur de fond aide sur les images chargées.

Toutes les fonctions de filtre, en direct

Déplacez n'importe quel curseur. La ligne sous l'image est la valeur filter exacte, prête à copier :

Seules les fonctions que vous avez éloignées de leur valeur neutre sont écrites, ce qui garde la valeur courte. brightness(1) ou blur(0px) ne changent rien, il n'y a donc aucune raison de les lister.

Les fonctions de filtre

FonctionValeur neutreEffetExemple
blur(r)0flou gaussien de rayon rblur(4px)
brightness(n)1plus sombre sous 1, plus lumineux au-dessusbrightness(0.7)
contrast(n)1plus terne sous 1, plus contrasté au-dessuscontrast(1.3)
grayscale(n)01 (ou 100%) est entièrement grisgrayscale(100%)
sepia(n)0ton brun chaudsepia(0.6)
saturate(n)10 est gris, au-dessus de 1 plus vifsaturate(1.5)
hue-rotate(a)0degdécale chaque teinte sur le cercle chromatiquehue-rotate(90deg)
invert(n)01 donne un négatif complet des couleursinvert(1)
opacity(n)1comme la propriété opacityopacity(0.5)
drop-shadow(x y blur color)une ombre qui suit la formedrop-shadow(2px 4px 6px rgb(0 0 0 / 0.3))

Les nombres peuvent aussi être des pourcentages (grayscale(100%) équivaut à grayscale(1)). Plusieurs fonctions se placent dans une seule valeur, séparées par des espaces, et sont appliquées dans l'ordre : filter: grayscale(1) sepia(1) donne une teinte brune, alors que sepia(1) grayscale(1) finit en simple gris.

drop-shadow suit la forme

box-shadow est toujours un rectangle (aux coins arrondis tout au plus). drop-shadow() est dessinée à partir des pixels visibles, si bien qu'une icône transparente reçoit une ombre au contour de l'icône :

La première étoile projette une ombre carrée depuis sa boîte invisible. La seconde en projette une en forme d'étoile. Contrairement à box-shadow, drop-shadow() n'a ni valeur de diffusion ni inset ; la page box-shadow traite de ces options.

Le problème des bords flous

Une image floutée s'estompe sur ses bords, car le flou y attire les pixels transparents qui l'entourent. Pour garder un bord net (pour un fond de bannière flouté, par exemple), placez l'image dans un conteneur en overflow: hidden et agrandissez légèrement l'image pour couper le bord doux :

.hero { overflow: hidden; }
.hero img { filter: blur(8px); transform: scale(1.1); }

Effets de survol avec filter

filter peut être animé par une transition : un mur de logos qui passent du gris à la couleur, ou une carte atténuée jusqu'au survol, tiennent en deux règles :

Survolez une tuile (ou atteignez-la avec Tab) et sa couleur apparaît en fondu.

Bon à savoir

  • Performances. Les grands rayons de flou sur de grandes surfaces coûtent le plus, surtout backdrop-filter sur des éléments qui bougent ou défilent. Testez sur un téléphone.
  • Lisibilité. Ne floutez jamais un texte que les gens doivent lire, et vérifiez le contraste du texte sur un panneau en verre dépoli.
  • Empilement. Tout filter autre que none crée un nouveau contexte d'empilement et devient le bloc conteneur des descendants en position: fixed, comme transform.

Erreurs courantes

  • filter: blur(5). Le rayon demande une unité : blur(5px).
  • Utiliser filter: blur() pour un panneau en verre dépoli. Cela floute le texte du panneau lui-même. Utilisez backdrop-filter avec un fond transparent.
  • Un backdrop-filter qui n'affiche rien. Le fond de l'élément doit être au moins partiellement transparent, et il doit y avoir quelque chose derrière.
  • Deux déclarations filter. La seconde remplace la première. Mettez toutes les fonctions dans une seule valeur.
  • Des ombres rectangulaires sur des icônes transparentes. Utilisez filter: drop-shadow() au lieu de box-shadow.

Questions fréquentes

Comment flouter un élément en CSS ?

Utilisez filter: blur(5px);. La longueur est le rayon du flou : 0 est net et les valeurs plus grandes sont plus floues. Cela floute l'élément et tout ce qu'il contient, texte et images compris.

Comment flouter le fond derrière un élément ?

Utilisez backdrop-filter: blur(10px); sur l'élément, avec un fond partiellement transparent comme rgb(255 255 255 / 0.5). Le contenu de l'élément reste net et ce qui se trouve derrière est flouté : c'est l'effet verre dépoli.

Quelle est la différence entre drop-shadow() et box-shadow ?

box-shadow suit toujours la boîte rectangulaire de l'élément. filter: drop-shadow() suit la forme visible, y compris les zones transparentes d'un PNG ou d'un SVG, si bien que l'ombre d'une icône a le contour de l'icône.

Comment mettre une image en noir et blanc en CSS ?

Utilisez filter: grayscale(100%); (ou grayscale(1)). Ajoutez une transition et filter: grayscale(0) au survol pour faire revenir la couleur.

Peut-on utiliser plusieurs filtres à la fois ?

Oui, listez-les séparés par des espaces : filter: grayscale(1) brightness(1.2) blur(1px);. Ils sont appliqués dans l'ordre, donc l'ordre peut changer le résultat. Une seconde déclaration filter remplace la première.

Coddy programming languages illustration

Apprendre à coder avec Coddy

COMMENCER