Atmosphère✨ Premium

Fog Layer

Deux pseudo-éléments CSS dérivent en sens opposés sur une piste 200 % pour simuler un brouillard semi-transparent en boucle — pur CSS, zéro JavaScript.

CSSPseudoAnimation

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 — Fond de scène atmosphérique — Fog Layer exemple 1

① Hero / Landing — Fond de scène atmosphérique

QuandPage d'accueil d'une app météo, de voyage, de méditation ou de tout produit qui mise sur une ambiance visuelle immersive et sombre.
PourquoiLe brouillard crée une profondeur layered derrière le titre sans recourir à une image ou un canvas — zéro asset externe, chargement instantané, aucune dépendance.
RéglagesFond linear-gradient(#0d1b2a 0%, #1b263b 100%) ; opacité de ::before portée à rgba(255,255,255,.12) ; durées 10s / 16s pour un rythme plus lent et enveloppant.
Composant produit — En-tête de carte dashboard — Fog Layer exemple 2

② Composant produit — En-tête de carte dashboard

QuandCarte KPI ou widget dans un dashboard analytics ou fintech — l'en-tête de la carte doit suggérer une activité en temps réel sans être distrayant.
PourquoiLe mouvement lent (8–12 s par cycle) signale subtilement que la donnée est vivante sans détourner l'attention du chiffre affiché au premier plan.
RéglagesFond bleuté linear-gradient(#0f172a 0%, #1e3a5f 100%) ; opacité de ::after réduite à rgba(255,255,255,.06) pour rester très discret en contexte dashboard.
Micro-interaction de conversion — Fond de modale tarifaire — Fog Layer exemple 3

③ Micro-interaction de conversion — Fond de modale tarifaire

QuandModale d'upgrade ou section de pricing premium — le brouillard renforce le caractère exclusif et enveloppant d'une offre haut de gamme.
PourquoiUne ambiance visuelle luxueuse sur la modale augmente la perception de valeur de l'offre sans alourdir la page avec des assets externes ou du canvas.
RéglagesFond violet linear-gradient(#1a0533 0%, #2d1058 100%) ; durées 6s / 9s pour un léger frisson de lenteur ; opacités portées à .06/.12 pour épaissir légèrement le voile sur fond sombre.

Comment ça marche

.fog-container::before et ::after créent deux voiles indépendants. Chaque voile est un rectangle virtuel de largeur 200 % positionné à left: -50% de son parent — un décalage d'une largeur de conteneur. L'animation @keyframes fogDrift applique translateX(-25%)translateX(25%), soit un déplacement de 50 % de la largeur propre de l'élément, c'est-à-dire exactement une largeur de conteneur d'un côté à l'autre. Combiné à un gradient horizontal symétrique (transparent aux bords), la boucle est invisible à l'œil nu.

Le gradient horizontal de chaque voile simule la densité du brouillard : plages transparentes aux extrémités, pics d'opacité blanche au centre (rgba(255,255,255,.08) pour ::before, .10 pour ::after). Les valeurs restent délibérément proches de la transparence totale — l'effet est vaporeux, pas couvrant.

La profondeur naît de deux différences entre les couches : ::before occupe 100 % de la hauteur et se déplace en 8s linear infinite ; ::after occupe 60 % de la hauteur, démarre à top: 30% (banc de brouillard concentré en position médiane), tourne à 12s linear infinite reverse avec un délai de -4s. La direction inversée et la vitesse différente produisent une dérive croisée qui donne l'illusion de volume tridimensionnel.

Accessibilité

  • prefers-reduced-motion absent : l'effet ne lit pas la préférence système — les animations tournent en permanence quelle que soit la configuration OS. Pour un contexte accessible, ajoutez vous-même : @media (prefers-reduced-motion: reduce) { .fog-container::before, .fog-container::after { animation: none; } }.
  • Le .fog-container ne porte aucun rôle ARIA dans le code livré — pour un usage purement décoratif, ajoutez aria-hidden="true" sur l'élément afin que les lecteurs d'écran ignorent les pseudo-éléments animés.
  • Le contenu superposé (.fog-content) est en position: relative; z-index: 3 et reste dans le flux normal — les lecteurs d'écran y accèdent sans obstacle.
  • Contraste : les voiles sont très faibles (opacité max 10 %) sur fond sombre — l'effet ne détériore pas le contraste du texte overlay, mais vérifiez votre ratio texte/fond indépendamment de l'effet.
  • Aucune interaction clavier ou pointeur n'est gérée — pas de focus trap, pas de gestionnaire d'événements, impact zéro sur la navigation.

Compatibilité navigateur

Nécessite CSS animation, linear-gradient et pseudo-éléments — supportés dans tous les navigateurs modernes depuis 2012. Zéro dépendance externe.

Chrome 75+✓ Complet
Firefox 70+✓ Complet
Safari 13+✓ Complet
Edge 79+✓ Complet
Mobile iOS 13+✓ Complet
Android Chrome 75+✓ Complet

Sur un navigateur très ancien sans support <code>animation</code>, <code>.fog-container</code> reste visible avec son gradient de fond statique — aucune erreur JS (il n'y a pas de JS), le contenu superposé est intact.

Le code

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

index.html — structure
<div class="demo-preview">
  <div class="fog-container">
    <!-- pseudo-éléments ::before et ::after gérés entièrement par le CSS -->
  </div>
  <!-- contenu superposé (optionnel) -->
  <span class="fog-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
animation-duration sur ::before 8s Vitesse du premier voile. 5s = brouillard agité ; 20s = nappe très lente et apaisante.
animation-duration sur ::after 12s Vitesse du second voile (couche basse). Gardez un ratio ≠ 1 avec le premier pour éviter la synchronisation qui casse l'illusion de profondeur.
animation-delay sur ::after -4s Déphasage de départ du second voile. Une valeur négative lance immédiatement au milieu du cycle — modifiez-la pour décaler la position initiale du brouillard visible au chargement.
rgba opacity dans le gradient de ::before 0.03 / 0.08 / 0.05 / 0.02 Densité du premier voile. Montez toutes les valeurs uniformément (ex. 0.06/0.16/0.10/0.04) pour un brouillard épais ; descendez pour une brume quasi invisible.
height et top sur ::after 60% / top 30% Hauteur et position verticale du second voile. Passez à top: 50%; height: 50% pour concentrer le brouillard dense dans la moitié basse, ou top: 0; height: 100% pour deux voiles couvrants.
background sur .fog-container linear-gradient(#1a1a2e → #16213e) Couleur de fond de la scène. Remplacez par votre gradient brand — les voiles blancs se superposent quelle que soit la teinte.
animation-direction sur ::after reverse Supprimez reverse pour que les deux voiles dérivent dans le même sens — effet de courant ou de vent plutôt que de tourbillon croisé.

FAQ

Les pseudo-éléments font 200 % de la largeur du conteneur et démarrent à left: -50%. L'animation déplace chaque voile de translateX(-25%) à +25% de sa propre largeur — exactement une largeur de conteneur d'un bord à l'autre. Comme le gradient horizontal est symétrique (transparent aux deux extrémités), le raccord entre la fin et le début du cycle est totalement invisible.
Remplacez rgba(255,255,255,…) par rgba(R,G,B,…) dans les gradients des deux pseudo-éléments — ex. rgba(100,160,255,0.10) pour un brouillard bleu glacé. Ajustez également le background de .fog-container pour que la teinte du fond soit cohérente avec celle du voile.
Oui — Fog Layer est 100 % CSS, aucune ligne de JavaScript n'est nécessaire. Il n'y a ni API publique ni fonction à appeler : copiez le HTML et le CSS, et l'effet s'anime seul. Compatible React, Vue, Angular, Svelte — incluez-le comme style global ou CSS Module, enveloppez le HTML dans un composant.