Distorsion✨ Premium

Noise Overlay

Grain de film qui frémit sur n'importe quelle surface : un calque de bruit SVG à 15 % se décale d'un pixel toutes les 20 ms, sans une ligne de JavaScript.

CSSFilmTexture

Mis à jour le

Cet effet fait partie d'Effect.Labs — 840 effets vanilla, une partie gratuite, une partie premium. Distorsion comprend 31 effets, dont 5 gratuits. Découvrir la catégorie →

3 exemples d'usage

Haut de page d'un ciné-club — le grain argentique sur toute l'image d'accueil — Noise Overlay exemple 1

① Haut de page d'un ciné-club — le grain argentique sur toute l'image d'accueil

QuandLe ciné-club Vossandre ouvre son site sur un paysage au crépuscule ; le grain frémit sur toute la largeur, sous le titre, le menu et le bouton « Voir le programme ».
PourquoiLe grain dit « pellicule » avant même de lire le titre. Comme il passe sous le contenu, le texte reste net et le bouton cliquable.
Réglages--fgr-w: 100%, --fgr-h: 100%, --fgr-radius: 0, --fgr-opacity: .45 ; --fgr-bg = le paysage en dégradés CSS (une photo en url() marche pareil). Le menu et le titre sont dans .fgr-content.
Pochette de vinyle sur la fiche produit d'un disquaire — Noise Overlay exemple 2

② Pochette de vinyle sur la fiche produit d'un disquaire

QuandSur la fiche de l'album Kestrombe chez le disquaire Brumelac, la pochette carrée garde un grain vivant à côté de la liste des titres, du prix et du bouton d'achat.
PourquoiUn visuel plat paraît imprimé et ancien dès qu'il prend du grain. L'effet donne de la matière à une illustration vectorielle sans retoucher l'image.
Réglages--fgr-w et --fgr-h à 206px, --fgr-radius: 2px, --fgr-opacity: .5, --fgr-root-bg: transparent, --fgr-root-h: 206px ; le nom du groupe et de l'album sont dans .fgr-content, la surface porte role="img".
Curseur « Grain » d'un éditeur photo — le réglage appliqué en direct — Noise Overlay exemple 3

③ Curseur « Grain » d'un éditeur photo — le réglage appliqué en direct

QuandDans l'éditeur Lumaquet, l'utilisateur fait glisser le curseur « Grain » du panneau Rendu film ; l'aperçu de la photo devient plus ou moins granuleux au même instant.
PourquoiL'intensité du grain est une simple variable CSS : la brancher sur un input type="range" donne un aperçu instantané, sans recalculer l'image.
RéglagesAperçu de 300×220 px ; le curseur (0 à 70) écrit --fgr-opacity de 0 à .70 sur la racine. Pour la capture, la scène fait aller et venir le curseur tant que personne n'y touche.

Comment ça marche

La surface .fgr-box (250×150 px par défaut, dégradé indigo vers violet) porte deux enfants : le calque .fgr-grain et votre contenu .fgr-content. Le calque est une image SVG embarquée en data: : un filtre feTurbulence de type fractalNoise (fréquence 0,8, 4 octaves) qui produit un bruit coloré fin. Aucune image externe n'est chargée.

Le grain vit grâce à l'animation fgr-move : en 0,2 s et 10 paliers (steps(10)), le calque glisse de 10 px vers le haut et la gauche, puis la boucle repart. Le motif saute donc d'un pixel toutes les 20 ms, comme le grain d'une pellicule qui défile. Le calque déborde de 10 px à droite et en bas pour que ce glissement ne découvre jamais de bande nue au bord.

Le contenu .fgr-content passe au-dessus du grain (z-index: 1) et reste parfaitement net : seul le fond est texturé. Tout se règle par variables CSS posées sur .fx-0256-root : taille, fond, arrondi, intensité et cadence du grain. Avec --fgr-w: 100% et --fgr-h: 100%, la surface remplit tout son conteneur, ce qui permet de texturer un haut de page entier.

Mesuré dans Chromium 151, Firefox 153 et WebKit 26.5 : deux copies sur la même page tournent chacune de leur côté, rien n'est ajouté à window, aucune erreur. Le calque ne clignote pas (luminance moyenne constante, mesure image par image à 20 ms).

Accessibilité

  • Mouvement réduit : sous prefers-reduced-motion: reduce, l'animation fgr-move est coupée. Le grain reste affiché, figé : la texture est conservée, seul le frémissement disparaît.
  • Lisibilité : le grain est sous le contenu, jamais par-dessus. À 15 % il ne gêne pas la lecture ; au-delà de 40 % sur un fond clair, vérifiez le contraste de vos textes.
  • Lecteurs d'écran : le calque porte aria-hidden="true". Seul le texte de .fgr-content est lu. Si la surface représente une image (pochette, photo), donnez-lui role="img" et un aria-label.
  • Clavier et toucher : rien à activer, l'effet est purement décoratif. Le calque a pointer-events: none : les liens et boutons placés dans .fgr-content restent cliquables.

Compatibilité navigateur

CSS seul : variables CSS, @keyframes avec steps() et une image SVG feTurbulence en data:. Versions minimales d'après les données MDN (variables CSS : Chrome 49, Firefox 31, Safari 9.1). Mesuré dans Chromium 151, Firefox 153 et WebKit 26.5 : rendu et animation identiques.

Chrome 49+✓ Complet (mesuré)
Firefox 31+✓ Complet (mesuré)
Safari 9.1+✓ Complet (mesuré dans WebKit)
Edge 79+✓ Complet (moteur Chromium)
Mobile iOS 9.3+✓ Complet
Android Chrome 49+✓ Complet

Sans variables CSS, la surface perd ses dimensions et son fond (navigateurs d'avant 2016). Si l'image SVG n'est pas rendue, la surface reste unie avec son contenu : rien ne casse.

Le code

Structure HTML à coller dans votre page (le CSS + JS sont inclus avec votre achat) :

index.html — structure
<div class="fx-0256-root">
  <div class="fgr-box">
    <div class="fgr-grain" aria-hidden="true"></div>
    <span class="fgr-content">…</span>
  </div>
</div>

Paiement unique, sans abonnement — le code est à toi pour toujours

Personnaliser

Options passées à l'API ou attributs data-* :

Option / propriétéDéfautEffet
--fgr-w / --fgr-h 250px / 150px Taille de la surface texturée. 100% pour remplir le conteneur (la racine doit alors avoir une hauteur, voir --fgr-root-h). La largeur ne dépasse jamais celle de la racine.
--fgr-bg linear-gradient(135deg, #6366f1, #8b5cf6) Fond sous le grain : couleur, dégradé ou photo (url(photo.jpg) center / cover).
--fgr-opacity .15 Intensité du grain. Vers .3–.45 il se voit nettement, à .05 il devient une simple patine.
--fgr-speed .2s Durée d'une boucle de 10 paliers. .4s donne un grain plus calme ; 1s un frémissement lent.
--fgr-radius 12px Arrondi des coins de la surface ; 0 pour un fond de section.
--fgr-root-bg / --fgr-root-h #0a0a0f / 300px Fond et hauteur minimale de la racine qui centre la surface. transparent pour poser l'effet sur votre page, 0 pour que la racine épouse la surface.
Contenu (HTML — .fgr-content) Texte « GRAIN » Remplacez-le par n'importe quel contenu : titre, menu, bouton. Il passe au-dessus du grain et reste net.

FAQ

Oui, un peu : l'image SVG n'a pas de taille propre, le navigateur l'étire à la surface. Sur une zone de 250 px le grain est très fin, sur un haut de page de 1 400 px il devient plus gros. Si vous voulez un grain fin sur une très grande zone, ajoutez background-size: 300px à .fgr-grain (le motif se répète alors en tuiles).
Le filtre fractalNoise produit du bruit sur les quatre canaux (rouge, vert, bleu, transparence). Pour un grain neutre, ajoutez filter: grayscale(1) sur .fgr-grain.
Non : une seule animation transform par surface, que le navigateur confie à la carte graphique. L'image de bruit est calculée une fois puis seulement déplacée. Aucun JavaScript ne tourne.