Sfocare un elemento
filter: blur() accetta una lunghezza, il raggio della sfocatura. Più è grande, più l'elemento è sfocato:
filter funziona su qualsiasi elemento, non solo sulle immagini: un div sfocato sfoca anche il suo testo, il bordo e i figli. Nota i bordi morbidi delle immagini sfocate: la sfocatura allarga l'immagine verso l'esterno e la mescola con l'area trasparente attorno. La soluzione è più sotto, in "Il problema dei bordi sfocati".
Sfocare lo sfondo: backdrop-filter
Per sfocare ciò che sta dietro un elemento (un pannello di vetro smerigliato sopra una foto o una pagina), usa backdrop-filter. Il contenuto dell'elemento resta nitido. Serve uno sfondo trasparente per vedere la sfocatura:
Le strisce e i cerchi sono nitidi attorno al pannello e sfocati dietro di esso, mentre il testo del pannello resta intatto. Mantieni il testo leggibile: una tinta più chiara o più scura nel colore di sfondo aiuta sulle immagini piene di dettagli.
Tutte le funzioni di filtro, dal vivo
Muovi un cursore qualsiasi. La riga sotto l'immagine è il valore esatto di filter, pronto da copiare:
Vengono scritte solo le funzioni che hai spostato dal loro valore neutro, così il valore resta breve. brightness(1) o blur(0px) non cambiano nulla, quindi non c'è motivo di elencarle.
Funzioni di filtro
| Funzione | Valore neutro | Cosa fa | Esempio |
|---|---|---|---|
blur(r) | 0 | Sfocatura gaussiana con raggio r | blur(4px) |
brightness(n) | 1 | più scuro sotto 1, più luminoso sopra | brightness(0.7) |
contrast(n) | 1 | più piatto sotto 1, più incisivo sopra | contrast(1.3) |
grayscale(n) | 0 | 1 (o 100%) è tutto grigio | grayscale(100%) |
sepia(n) | 0 | tono marrone caldo | sepia(0.6) |
saturate(n) | 1 | 0 è grigio, sopra 1 più vivace | saturate(1.5) |
hue-rotate(a) | 0deg | sposta ogni tonalità lungo la ruota dei colori | hue-rotate(90deg) |
invert(n) | 0 | 1 è un negativo completo dei colori | invert(1) |
opacity(n) | 1 | come la proprietà opacity | opacity(0.5) |
drop-shadow(x y blur color) | un'ombra che segue la forma | drop-shadow(2px 4px 6px rgb(0 0 0 / 0.3)) |
I numeri possono anche essere percentuali (grayscale(100%) equivale a grayscale(1)). Più funzioni vanno in un solo valore, separate da spazi, e vengono applicate in ordine: filter: grayscale(1) sepia(1) dà una tinta marrone, mentre sepia(1) grayscale(1) finisce in un semplice grigio.
drop-shadow segue la forma
box-shadow è sempre un rettangolo (al massimo con angoli arrotondati). drop-shadow() viene disegnata a partire dai pixel visibili, quindi un'icona trasparente riceve un'ombra con il contorno dell'icona:
La prima stella proietta un'ombra quadrata dal suo riquadro invisibile. La seconda ne proietta una a forma di stella. A differenza di box-shadow, drop-shadow() non ha un valore di spread né inset; la pagina su box-shadow li spiega.
Il problema dei bordi sfocati
Un'immagine sfocata sfuma ai bordi, perché la sfocatura attira i pixel trasparenti attorno. Per mantenere un bordo netto (per esempio per uno sfondo sfocato in apertura di pagina), metti l'immagine in un contenitore con overflow: hidden e ingrandisci leggermente l'immagine, così il bordo morbido viene tagliato:
.hero { overflow: hidden; }
.hero img { filter: blur(8px); transform: scale(1.1); }
Effetti hover con filter
filter si può animare con una transizione, quindi una parete di loghi che passa dal grigio al colore o una scheda attenuata fino all'hover sono due regole:
Passa il mouse su un riquadro (o raggiungilo con Tab) e il suo colore compare in dissolvenza.
Buono a sapersi
- Prestazioni. I raggi di sfocatura grandi su aree grandi sono i più costosi, soprattutto
backdrop-filtersu elementi che si muovono o scorrono. Prova su un telefono. - Leggibilità. Non sfocare mai un testo che le persone devono leggere, e controlla il contrasto del testo sopra un pannello smerigliato.
- Contesto di sovrapposizione. Qualsiasi
filterdiverso danonecrea un nuovo stacking context e diventa il blocco contenitore per i discendenti conposition: fixed, cometransform.
Errori comuni
filter: blur(5). Il raggio richiede un'unità:blur(5px).- Usare
filter: blur()per un pannello smerigliato. Sfoca il testo del pannello stesso. Usabackdrop-filtercon uno sfondo trasparente. - Un backdrop-filter che non mostra nulla. Lo sfondo dell'elemento deve essere almeno in parte trasparente, e dietro deve esserci qualcosa.
- Due dichiarazioni
filter. La seconda sostituisce la prima. Metti tutte le funzioni in un solo valore. - Ombre a forma di box su icone trasparenti. Usa
filter: drop-shadow()invece dibox-shadow.
Domande frequenti
Come sfoco un elemento in CSS?
Usa filter: blur(5px);. La lunghezza è il raggio della sfocatura: 0 è nitido e i valori più grandi sono più sfocati. Sfoca l'elemento e tutto ciò che contiene, compresi testo e immagini.
Come sfoco lo sfondo dietro un elemento?
Usa backdrop-filter: blur(10px); sull'elemento, con uno sfondo in parte trasparente come rgb(255 255 255 / 0.5). Il contenuto dell'elemento resta nitido e ciò che c'è dietro viene sfocato: è l'effetto vetro smerigliato.
Che differenza c'è tra drop-shadow() e box-shadow?
box-shadow segue sempre il box rettangolare dell'elemento. filter: drop-shadow() segue la forma visibile, comprese le aree trasparenti di un PNG o di un SVG, quindi l'ombra di un'icona ha il contorno dell'icona.
Come rendo un'immagine in bianco e nero con il CSS?
Usa filter: grayscale(100%); (o grayscale(1)). Aggiungi una transizione e filter: grayscale(0) all'hover per far tornare il colore.
Posso usare più filtri insieme?
Sì, elencali separati da spazi: filter: grayscale(1) brightness(1.2) blur(1px);. Vengono applicati in ordine, quindi l'ordine può cambiare il risultato. Una seconda dichiarazione filter sostituisce la prima.