Atmosphère✨ Premium

Heat Haze

Dégradé coucher-de-soleil déformé en temps réel par un filtre SVG feTurbulence animé — l'air chaud tremble sur la scène, zéro JavaScript.

SVGFilterAnimation

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. Atmosphère comprend 57 effets, dont 10 gratuits. Découvrir la catégorie →

3 exemples d'usage

Hero / Landing — Bannière événement estival en plein air — Heat Haze exemple 1

① Hero / Landing — Bannière événement estival en plein air

QuandUne page d'atterrissage pour un festival, une vente flash d'été ou un lancement saisonnier — l'effet pose immédiatement le registre « chaleur » sans image chargée.
PourquoiLa distorsion thermique attire l'œil sur le fond sans écraser le titre. Le dégradé orange natif fonctionne comme une toile de fond crépusculaire, et les vagues subtiles signalent l'ambiance avant que le texte ne soit lu.
RéglagesScale 20 (SVG) pour une ondulation visible à distance ; fréquence 0.015 0.04 et dur 6 s pour un rythme lent qui n'épuise pas l'attention. Adapter les couleurs du dégradé .heat-container à la charte de l'événement.
Composant produit — Widget météo ou tableau de bord canicule — Heat Haze exemple 2

② Composant produit — Widget météo ou tableau de bord canicule

QuandUne carte météo, une alerte thermique ou un widget de dashboard climatique où la chaleur fait partie du message — ex. : prévisions de température, indice UV, alerte canicule.
PourquoiL'effet renforce la cohérence sémantique : l'air qui tremble dit « chaud » avant que les chiffres ne soient lus. Le fond scène peut être miniaturisé en card 300 × 200 px sans perte visuelle.
RéglagesRéduire scale à 12 (SVG feDisplacementMap) pour un shimmer plus subtil derrière les données ; allonger dur à 8–10 s pour éviter que l'animation paraisse agressive dans un composant de densité d'information.
Micro-interaction de conversion — Offre flash saisonnière — Heat Haze exemple 3

③ Micro-interaction de conversion — Offre flash saisonnière

QuandUn CTA ou une bannière « offre limitée » estivale où la chaleur symbolise l'urgence — soldes, prix barré, compte à rebours.
PourquoiLa distorsion ondulante augmente la charge émotionnelle de la scène : l'œil perçoit un fond « instable » qui amplifie l'urgence perçue. L'effet s'arrête net au hover sur le bouton (pointer-events isolés) pour ne pas perturber le clic.
RéglagesAugmenter scale à 28–32 (SVG) pour intensifier l'ondulation et accentuer la tension visuelle ; conserver dur à 4–5 s pour un rythme plus pressant. Teinter .heat-container avec un rouge-orange plus saturé (#e84b2a → #ff6b35 → #c4501a).

Comment ça marche

La scène repose sur deux couches CSS empilées : .heat-container dessine un dégradé linéaire coucher-de-soleil (orange #ff6b35 → ambre → beige → brun #8b7355) et .heat-road ajoute une route sombre en bas (40 % de hauteur, dégradé brun clair → brun foncé). Aucun canvas, aucune image externe.

La distorsion est produite par un filtre SVG défini hors du JSON et référencé via filter: url(#heatHazeFilter) sur .heat-haze-overlay. Ce filtre enchaîne deux primitives : <feTurbulence type="fractalNoise"> génère une carte de bruit cohérent 2D (fréquences de base 0.015 × 0.04, 2 octaves), puis <feDisplacementMap in="SourceGraphic" in2="noise" scale="20"> déplace chaque pixel du canal R (axe X) et G (axe Y) proportionnellement à la valeur de bruit — le résultat est une déformation ondulante douce.

L'animation est pilotée par SVG SMIL : un élément <animate attributeName="baseFrequency"> niché dans <feTurbulence> fait osciller la fréquence entre 0.015 0.04 et 0.02 0.055 sur un cycle de 6 secondes (repeatCount="indefinite"). Ce changement de fréquence déplace le patron de bruit dans les deux axes, simulant le mouvement de l'air chaud. Zéro requestAnimationFrame, zéro JavaScript.

Le texte .heat-content est positionné en z-index: 2 au-dessus de toutes les couches et reçoit un text-shadow semi-opaque pour rester lisible sur le gradient.

Accessibilité

  • prefers-reduced-motion absent : le filtre SVG SMIL (<animate>) ignore la media query prefers-reduced-motion. L'animation tourne même si l'utilisateur préfère réduire les mouvements — pour respecter cette préférence, supprimer ou suspendre l'élément <animate> via JavaScript au chargement.
  • Le conteneur n'expose pas de role ni d'aria-label — le texte .heat-content dans le DOM est la seule information accessible aux lecteurs d'écran.
  • Aucun élément interactif dans l'effet : pas de bouton, pas de lien, pas de focus piégé. Navigation clavier non affectée.
  • Le texte blanc sur fond gradient obtient un contraste ≥ 4.5:1 sur la partie la plus sombre (brun #8b7355), et ≥ 3.1:1 sur l'orange vif — la zone road respecte WCAG AA pour les textes larges (18 px+ bold).
  • L'overlay .heat-haze-overlay n'a pas d'aria-hidden : comme il est vide (aucun contenu textuel, aucun rôle sémantique), les AT l'ignorent naturellement.

Compatibilité navigateur

Requiert SVG Filters (feTurbulence + feDisplacementMap) et SVG SMIL animations — supportés dans tous les navigateurs modernes. La propriété CSS filter: url() fonctionne sans préfixe depuis Chrome 53, Firefox 35, Safari 9.1, Edge 79.

Chrome 88+✓ Complet
Firefox 87+✓ Complet
Safari 15+✓ Complet
Edge 88+✓ Complet
Mobile iOS✓ Complet
Android Chrome✓ Complet

Sans support SVG Filters, <code>filter: url()</code> est ignoré silencieusement — la scène affiche le dégradé et le texte sans distorsion. Aucune erreur JavaScript.

Le code

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

index.html — structure
<svg style="position:absolute;width:0;height:0" aria-hidden="true">
  <defs>
    <filter id="heatHazeFilter" x="-5%" y="-5%" width="110%" height="110%" color-interpolation-filters="sRGB">
      <feTurbulence type="fractalNoise" baseFrequency="0.015 0.04" numOctaves="2" seed="3" result="noise">
        <animate attributeName="baseFrequency" dur="6s" values="0.015 0.04;0.02 0.055;0.015 0.04" repeatCount="indefinite"/>
      </feTurbulence>
      <feDisplacementMap in="SourceGraphic" in2="noise" scale="20" xChannelSelector="R" yChannelSelector="G"/>
    </filter>
  </defs>
</svg>
<div class="demo-preview">
  <div class="heat-container">
    <div class="heat-road"></div>
    <div class="heat-haze-overlay"></div>
  </div>
  <span class="heat-content">Votre texte</span>
</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 (feDisplacementMap, SVG) 20 Intensité de la distorsion en pixels. 8–12 = shimmer subtil à peine perceptible ; 20 = ondulation visible ; 30–40 = déformation forte. Modifier l'attribut scale sur l'élément dans la définition du filtre SVG.
baseFrequency (feTurbulence, SVG) "0.015 0.04" Taille des vagues (X et Y indépendants). Valeurs basses (0.008 0.02) = grandes ondulations lentes ; valeurs hautes (0.04 0.08) = micro-tremblements fins. Modifier l'attribut baseFrequency sur .
dur (animate, SVG) "6s" Durée d'un cycle d'animation complet. "3s" = air très agité ; "10s" = ondulation lente et apaisante. Modifier l'attribut dur sur l'élément niché dans .
numOctaves (feTurbulence, SVG) 2 Niveau de détail du bruit. 1 = vagues larges et lisses (poids CPU minimal) ; 3–4 = texture complexe avec micro-ondulations (léger surcoût de rendu sur mobiles anciens).
.heat-container background (CSS) linear-gradient(#ff6b35 0, #f7931e 30%, #c4a35a 60%, #8b7355 100%) Palette de la scène. Remplacer les couleurs pour changer l'ambiance : bleus/violets pour une nuit d'été, verts pour une forêt ensoleillée, gris pour un asphalte urbain.
.heat-road height (CSS) 40% Proportion de la route dans la scène. 0% supprime la route (ciel seul) ; 60–70% pour un gros plan sur le bitume brûlant. S'applique sur .heat-road en CSS inline ou feuille de style.

FAQ

Le filtre SVG n'est pas inclus dans le JSON du code source. Il doit être inséré manuellement une fois dans le document (dans <body> ou <head>), avant les éléments qui le référencent. Le bloc complet figure dans la section « Structure HTML » de cette page. Un seul bloc SVG suffit même si l'effet est instancié plusieurs fois sur la même page.
La primitive CSS filter: url() distord le contenu rendu de l'élément ciblé. Appliqué à un <div> sans background ni contenu visible, le filtre n'a rien à transformer. Appliquez filter: url(#heatHazeFilter) directement sur .heat-container (qui porte le dégradé) pour que la déformation soit immédiatement visible.
Oui. Le filtre SVG est indépendant des couleurs. Appliquez filter: url(#heatHazeFilter) à n'importe quel élément HTML — un <img>, une <section> entière, ou un dégradé personnalisé. Attention : le filtre décale les coordonnées de rendu, ce qui peut désaligner les zones cliquables d'éléments enfants interactifs (boutons, liens) — isolez le filtre sur un calque de fond dédié.