Backgrounds✨ Premium

Noise Displacement

Texte déformé par un champ de bruit SVG fractal — feTurbulence génère la carte de déplacement, feDisplacementMap distord les pixels ; l'intensité double au survol via CSS pur, zéro JavaScript.

SVGFilterHover

Vous aurez accès à la démo interactive avec un compte gratuit.

Cet effet fait partie d'Effect.Labs — 811 effets vanilla, une partie gratuite, une partie premium. Backgrounds comprend 50 effets, dont 6 gratuits. Découvrir la catégorie →

3 exemples d'usage

Header éditorial — Titre glitch pour un zine ou portfolio créatif — Noise Displacement exemple 1

① Header éditorial — Titre glitch pour un zine ou portfolio créatif

QuandLa page d'accueil d'un zine digital, d'un portfolio de motion designer ou d'un studio créatif affiche un grand titre typographique comme pièce maîtresse visuelle.
PourquoiLa déformation par bruit fractal donne au texte une texture organique et brute impossible à obtenir avec du CSS pur. Le survol révèle une version plus corrompue, renforçant le registre expérimental — le texte reste lisible à grande taille malgré la distorsion.
RéglagesFont-size 5–7rem, scale repos 14, scale fort 36, baseFrequency 0,035 (bruit grossier et expressif), numOctaves 3. Typographie display condensed pour maximiser l'impact visuel des déformations sur les pleins et les déliés.
Composant sécurité — Identifiant ou clé dans un état « obscurci » — Noise Displacement exemple 2

② Composant sécurité — Identifiant ou clé dans un état « obscurci »

QuandUn tableau de bord de sécurité, une interface de gestion de tokens ou un outil de cryptographie affiche un identifiant ou une clé API dans un état masqué ou verrouillé.
PourquoiLa déformation simule visuellement l'obscurcissement sans cacher le texte — l'utilisateur perçoit que l'information existe mais est protégée. Le survol intensifie la distorsion pour renforcer l'état « verrouillé ». L'effet est purement CSS, donc sûr côté bundle.
RéglagesFont-size 1–1.4rem monospace, baseFrequency 0,07 (grain fin, rendu numérique), scale repos 8, scale fort 20, numOctaves 2.
Dashboard cybersécurité — Secrets et tokens masqués par distorsion — Noise Displacement exemple 3

③ Dashboard cybersécurité — Secrets et tokens masqués par distorsion

QuandUne console DevSecOps ou une interface de gestion des accès liste plusieurs identifiants sensibles (clés API, tokens, secrets d'environnement) dans un panneau de tableau de bord. Les valeurs doivent rester dans le DOM pour les lecteurs d'écran, mais rester illisibles visuellement par défaut.
PourquoiLa distorsion forte au repos rend les valeurs indéchiffrables sans les cacher — le texte brut reste accessible aux technologies d'assistance. Le survol sur le panneau réduit l'intensité du déplacement pour révéler progressivement les données : une mécanique de dévoilement inverse absente du CSS natif, impossible sans filtres SVG.
Réglagesscale repos 32 (masquage maximal), scale survol 4 (quasi-lisible), baseFrequency 0,06 (grain numérique), numOctaves 2, seed 14. Transition filter 0,5s pour un dévoilement progressif. Les deux filtres SVG gardent leurs noms conventionnels mais leurs scales sont délibérément inversés par rapport à l'usage standard.

Comment ça marche

L'effet repose sur un pipeline de filtres SVG déclaré dans un <defs> invisible dans la page. feTurbulence type="fractalNoise" génère une image de bruit synthétique — une texture procédurale dont chaque pixel encode une valeur de déplacement dans ses canaux R et G. feDisplacementMap lit ensuite ces canaux et décale chaque pixel du texte source de (valeur - 0,5) × scale dans les deux axes : le résultat est un texte dont chaque lettre est déformée selon la topographie locale du champ de bruit.

Deux filtres distincts sont définis avec le même feTurbulence mais un scale différent sur le feDisplacementMap : le premier applique une distorsion modérée (état de repos), le second l'amplifie. Le sélecteur CSS .ng-displace-scene:hover .ng-displace-text bascule l'élément de filter: url(#ng-displace-filter) à filter: url(#ng-displace-filter-strong) au survol — aucun JS n'intervient.

La propriété transition: filter .3s produit un fondu enchaîné entre les deux états de filtre. Chrome et Edge interpolent réellement les valeurs intermédiaires du feDisplacementMap ; Firefox et Safari effectuent un cross-fade discret sans saut brutal. Dans les deux cas la progression est visuellement lisse. Le bruit de feTurbulence est statique (pas d'attribut animate) : aucun calcul GPU ne tourne hors survol.

Le champ de bruit est contrôlé par baseFrequency (fréquence spatiale : bas = bruit grossier et organique, haut = grain fin et numérique), numOctaves (richesse du détail fractale) et seed (graine aléatoire — permet de varier la forme du bruit entre instances sans modifier le comportement). L'effet s'applique à n'importe quel élément HTML, pas seulement du texte.

Accessibilité

  • prefers-reduced-motion non implémenté : aucun @media (prefers-reduced-motion: reduce) dans le code. La distorsion de repos est statique (pas de boucle d'animation), ce qui est acceptable ; mais la transition de filter au survol (.3s) n'est pas supprimée pour les utilisateurs sensibles au mouvement.
  • Contraste texte : blanc #fff sur fond #0a0a0f — ratio ≈ 19,8:1, dépasse largement WCAG AAA (7:1). La distorsion réduit la lisibilité perçue mais ne modifie pas le ratio de contraste mesuré.
  • Interaction clavier : l'intensité au survol est déclenchée par :hover uniquement — aucun équivalent :focus-within ou :focus-visible n'est prévu. Les utilisateurs naviguant au clavier ne voient que l'état de repos.
  • Sémantique : les lecteurs d'écran lisent le texte brut de .ng-displace-text directement — la distorsion est purement visuelle et n'affecte pas l'arbre d'accessibilité. Aucun aria-label supplémentaire n'est nécessaire.

Compatibilité navigateur

Nécessite SVG inline et la propriété CSS filter: url(#id) sur élément HTML — supporté dans tous les navigateurs modernes. Aucune dépendance externe.

Chrome 88+✓ Complet
Firefox 88+✓ Complet
Safari 15.4+✓ Complet
Edge 88+✓ Complet
Mobile iOS✓ Statique OK (pas de survol)
Android Chrome✓ Statique OK (pas de survol)

Si les filtres SVG ne sont pas supportés, le texte s'affiche sans distorsion — aucune erreur JS (le JS est inexistant), aucune dégradation du layout.

Le code

Structure HTML à coller dans votre page (CSS + JS disponibles avec un compte premium) :

index.html — structure
<svg width="0" height="0" aria-hidden="true" style="position:absolute">
  <defs>
    <filter id="ng-displace-filter">
      <feTurbulence type="fractalNoise" baseFrequency="0.04" numOctaves="4" seed="2" result="noise"/>
      <feDisplacementMap in="SourceGraphic" in2="noise" scale="12" xChannelSelector="R" yChannelSelector="G"/>
    </filter>
    <filter id="ng-displace-filter-strong">
      <feTurbulence type="fractalNoise" baseFrequency="0.04" numOctaves="4" seed="2" result="noise"/>
      <feDisplacementMap in="SourceGraphic" in2="noise" scale="28" xChannelSelector="R" yChannelSelector="G"/>
    </filter>
  </defs>
</svg>
<div class="ng-displace-scene">
  <div>
    <div class="ng-displace-text">VOTRE TEXTE</div>
    <p class="ng-displace-sub">Survolez pour amplifier</p>
  </div>
</div>
🔒 Débloquer le code complet — à partir de 2,99 € le 1er mois

HTML + CSS + JS complet, prêt à coller — avec des centaines d'effets premium.

Personnaliser

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

Option / propriétéDéfautEffet
scale (filtre repos) ~12 Attribut scale du feDisplacementMap dans #ng-displace-filter — amplitude de distorsion en pixels CSS à l'état de repos. Valeurs conseillées : 6–18.
scale (filtre fort) ~28 Attribut scale du feDisplacementMap dans #ng-displace-filter-strong — amplitude au survol. Un ratio repos/fort de 1:2,3 produit une progression naturelle.
baseFrequency 0.04 Fréquence spatiale du feTurbulence (même valeur dans les deux filtres). Plus bas = bruit grossier/organique ; plus haut = grain fin/digital. Valeurs typiques : 0,025–0,08.
numOctaves 4 Nombre d'octaves du feTurbulence — plus élevé = détail fractale plus riche mais plus coûteux GPU. 2–3 pour un effet fluide à la volée, 5–6 pour une texture fouillée sur contenu fixe.
seed 2 Graine du feTurbulence (entier 0–9999). Change la forme du bruit sans modifier sa densité. Indispensable pour différencier deux instances sur la même page et éviter les patterns identiques.
transition: filter .3s .3s Durée de la transition CSS sur .ng-displace-text. Rallongez à .5–.8s pour une révélation dramatique, réduisez à .1s pour un snap brutal. Supprimez entièrement pour un basculement instantané.
font-size (.ng-displace-text) 2.5rem La distorsion perçue est proportionnelle à la taille de la fonte — augmenter la taille rend le déplacement plus spectaculaire à scale constant. Pas besoin d'augmenter scale si vous grossissez déjà le texte.

FAQ

Animer directement les attributs SVG comme scale via CSS n'est pas standardisé. Déclarer deux filtres avec des scale différents et basculer entre eux via :hover + transition: filter est la technique la plus compatible : Chrome et Edge interpolent les valeurs intermédiaires, Firefox et Safari font un cross-fade, mais dans les deux cas le résultat visuel est lisse et ne nécessite aucun JS.
Les IDs SVG sont globaux au document — deux blocs #ng-displace-filter sur la même page entraîneraient une collision (seul le premier serait utilisé). Renommez les filtres de la seconde instance avec un suffixe : #ng-displace-filter-2 et #ng-displace-filter-strong-2, et mettez à jour les règles CSS correspondantes. Changez aussi le seed pour des patterns différents.
Oui — filter: url(#ng-displace-filter) s'applique à n'importe quel élément HTML : image, vidéo, <div> avec fond, SVG inline. Sur des images, la déformation produit un effet de réfraction ou de verre déformant ; sur des formes avec bords nets, les contours se fragmentent en motifs organiques. Ajustez scale à la baisse pour les surfaces larges — un scale élevé crée des artefacts transparents aux bords de l'élément.