In breve
- Una texture di rumore in CSS di solito si crea con un filtro SVG feTurbulence, incorporato come piccola immagine data URI e ripetuto sopra un gradiente.
- Il baseFrequency di feTurbulence stabilisce la grandezza della grana: valori più alti danno una grana più fine, valori più bassi un rumore grosso e nuvoloso.
- Il rumore funziona meglio sovrapposto al gradiente su uno pseudo-elemento con una modalità di fusione come soft-light o overlay e una bassa opacità.
- La grana nasconde il banding dei gradienti perché spezza i bordi visibili tra sfumature vicine in una fine variazione casuale.
- Un’immagine di rumore ripetuta è economica da disegnare, mentre applicare un filtro SVG dal vivo a un grande elemento, o animarlo, costa molto di più.
In questa pagina
Una texture di rumore in CSS è una fine granulosità casuale sovrapposta a un colore o a un gradiente per dargli grana. Il CSS non ha una funzione di rumore, quindi la fonte standard è l’SVG: il filtro feTurbulence genera il rumore, lo racchiudi in un minuscolo SVG, lo incorpori come data URI e lo ripeti sopra il gradiente a bassa intensità. Il risultato sembra grana da pellicola o carta stampata, e risolve con discrezione il banding, il visibile effetto a gradini che compare nei gradienti ampi e morbidi.
Perché la grana fa sembrare il colore più prezioso è spiegato nei gradienti con grana. Questa guida è l’implementazione.
Il filtro di rumore SVG
<svg xmlns="http://www.w3.org/2000/svg" width="240" height="240">
<filter id="n">
<feTurbulence type="fractalNoise" baseFrequency="0.8" numOctaves="3" stitchTiles="stitch" />
<feColorMatrix type="saturate" values="0" />
</filter>
<rect width="100%" height="100%" filter="url(#n)" />
</svg>| Attributo | Valore qui | Cosa controlla |
|---|---|---|
type | fractalNoise | Grana morbida e uniforme. turbulence dà un rumore più striato e ondulato. |
baseFrequency | 0.8 | Grandezza della grana. Da 0,6 a 0,9 è grana fine; da 0,1 a 0,3 è nuvolosa. |
numOctaves | 3 | Livelli di dettaglio. Oltre 4 circa la differenza è difficile da vedere. |
stitchTiles | stitch | Fa combaciare i bordi del riquadro, così le ripetizioni non hanno giunture. |
feColorMatrix saturate 0 | 0 | Toglie il colore casuale, lasciando una grana grigia. |
Incorporare il rumore come data URI
Un file separato funziona, ma incorporarlo risparmia una richiesta e tiene l’effetto in un solo posto. In un data URI, i caratteri che hanno un significato negli URL vanno codificati: < diventa %3C, > diventa %3E, # diventa %23 e % diventa %25. Usa apici singoli dentro l’SVG così non si scontrano con le virgolette doppie attorno all’URL.
:root {
--noise: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='240' height='240'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}# come %23 è il solito motivo per cui in Firefox non si vede nulla.Sovrapporre il rumore a un gradiente
Metti il rumore su uno pseudo-elemento sopra il gradiente, poi controllalo con due manopole: una modalità di fusione, che decide come la grana grigia si mescola con il colore sotto, e l’opacità, che decide quanto è forte. soft-light mantiene puliti i colori ed è la più delicata; overlay aggiunge più contrasto. pointer-events: none impedisce al livello di bloccare i clic.
.grain {
position: relative;
isolation: isolate;
background: linear-gradient(135deg, #1e1b4b, #7c3aed 55%, #f472b6);
}
.grain::after {
content: "";
position: absolute;
inset: 0;
z-index: -1;
background-image: var(--noise);
mix-blend-mode: soft-light;
opacity: 0.45;
pointer-events: none;
}.grain resta nitido.Se preferisci un solo elemento senza pseudo-elemento, metti il rumore per primo in background-image e imposta background-blend-mode: soft-light, normal. Perdi la manopola separata dell’opacità, quindi incorpora l’intensità nell’SVG, ad esempio con opacity='0.5' sul rect.
Quanta grana basta
- 1
Parti debole
Comincia con
opacity: 0.3esoft-light. Dovresti notarla appena a distanza di braccio. - 2
Controlla la zona più scura
Il banding vive nelle dissolvenze scure e lente. Alza l’opacità finché i gradini lì si sciolgono, poi fermati.
- 3
Adatta la grana alla dimensione
Gli hero a schermo intero possono reggere una grana un po’ più grossa, intorno a 0,6. Schede e pulsanti vogliono una grana fine, intorno a 0,9.
- 4
Controlla su un telefono e su un grande monitor
Una grana che va bene su uno schermo può sembrare polvere su un altro. Punta a una texture che si sente più che si vede.
- 5
Controlla il testo sopra
La grana non deve ridurre la leggibilità. Se un testo piccolo sta sulla texture, riduci l’intensità o tieni il testo su una zona più calma.
Troppa
- Grana visibile da una parte all’altra della stanza
- I colori diventano grigi e sporchi
- Rumore grosso e nuvoloso su componenti piccoli
- I bordi del testo sembrano sfocati contro la granulosità
Giusta
- Grana notata solo da vicino
- I colori restano puliti con soft-light
- Grana fine proporzionata all’elemento
- Banding sparito, testo nitido
Prestazioni del rumore in CSS
Un data URI ripetuto è economico: il browser disegna una volta il piccolo riquadro e lo ripete, e un livello statico viene dipinto una volta. La versione costosa è applicare il filtro dal vivo a un grande elemento con filter: url(#noise), che passa il filtro su ogni pixel ogni volta che l’area si ridisegna. Se animi la grana, per un effetto pellicola tremolante, sposta il livello ripetuto con transform in pochi scatti invece di rigenerare il rumore, e spegnilo per il movimento ridotto.
.grain {
overflow: hidden;
}
.grain::after {
inset: -50%;
animation: flicker 0.6s steps(3) infinite;
}
@keyframes flicker {
0% { transform: translate(0, 0); }
33% { transform: translate(-3%, 2%); }
66% { transform: translate(2%, -3%); }
}
@media (prefers-reduced-motion: reduce) {
.grain::after { animation: none; }
}Un riquadro di rumore PNG o WebP già pronto, di circa 128-256 pixel, è una fonte altrettanto buona se ne hai già uno. La grana è anche un ingrediente di una famiglia più ampia di superfici, dalla carta al vetro, trattata nelle texture di sfondo. È anche lo strato finale di un gradiente mesh in CSS.
La grana è incorporata in ogni Mark di Gradiently come impostazione del materiale, accanto a luce e movimento, quindi i design realizzati con uno di essi portano la texture senza alcun codice.

GR·W4AX·4M
Muslin Anvil
Vedi questo MarkLe domande più frequenti
Come aggiungo una texture di rumore in CSS?
Incorpora un SVG con un filtro feTurbulence come data URI, ripetilo su uno pseudo-elemento sopra il gradiente e imposta una modalità di fusione come soft-light con bassa opacità.
Perché il mio data URI di rumore SVG non si vede?
Di solito per un carattere non codificato. Nel data URI codifica # come %23, % come %25 e le parentesi angolari come %3C e %3E, e usa apici singoli dentro l’SVG.
La grana risolve il banding dei gradienti?
Sì, nella maggior parte dei casi. Una fine variazione casuale spezza i bordi netti tra sfumature vicine, così l’occhio non vede più i gradini.
Quale baseFrequency devo usare per la grana?
Da 0,6 a 0,9 dà una grana fine simile alla pellicola. Valori più bassi come 0,2 danno un rumore grosso e nuvoloso.
Il rumore in CSS fa male alle prestazioni?
Una piccola immagine di rumore ripetuta è economica. A costare di più sono i filtri SVG dal vivo su grandi elementi e il rumore rigenerato di continuo.
Scritto da Gradiently
Il team dietro Gradiently, uno strumento di design costruito attorno ai Mark: gradienti vivi che fanno sembrare tuo tutto ciò che progetti.
Vedi il nostro profilo


