Transitions✨ Premium

Gradient Shift

Le fond d'ambiance passe d'un dégradé de nuit bleu-violet à un dégradé doré en 0,8 s, son halo violet devient ambre et les textes suivent : le dégradé or vit dans un calque posé sur la nuit et c'est son opacité qui s'anime, donc la bascule est continue dans tous les navigateurs. 0,6 Ko de JavaScript, 150 ms si l'utilisateur réduit les animations.

CSSGradientAmbient

Mis à jour le

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

3 exemples d'usage

Balade de nuit vers balade à l'aube — réservation d'un loueur de kayaks de mer — Gradient Shift exemple 1

① Balade de nuit vers balade à l'aube — réservation d'un loueur de kayaks de mer

QuandLe client hésite entre la sortie bioluminescence de 22 h et le lever de soleil de 6 h 15 : à chaque créneau touché, tout l'écran passe de la nuit marine à l'aube rose-orangé.
PourquoiToute l'atmosphère change avec le créneau, comme le jour qui se lève : le client sent la sortie qu'il choisit avant de lire l'horaire, et le halo devient soleil levant.
RéglagesScène pleine page, 540 × 360 px ; dégradés remplacés (nuit #020617 → #0c4a6e à 180°, aube #fcd9a8 → #f4a3a0) ; halo agrandi à 120 px en haut à droite ; vagues SVG sombres posées entre le fond et le texte ; deux boutons de créneau qui posent active.
Heures creuses vers heures pleines — appli d'un fournisseur d'électricité — Gradient Shift exemple 2

② Heures creuses vers heures pleines — appli d'un fournisseur d'électricité

QuandÀ 6 h, l'appli passe de « heures creuses, 0,2068 € le kWh » sur fond bleu nuit à « heures pleines, 0,2700 € » sur fond doré ; le graphique de consommation du jour reste en place.
PourquoiLe dégradé d'ambiance code la période tarifaire sans texte à lire ; le halo suit la couleur, et le libellé reste là pour qui ne distingue pas les couleurs.
RéglagesDégradés et halo de l'effet conservés tels quels, halo agrandi à 150 px ; barres du graphique avec leur propre transition de couleur de 0,8 s ; boutons « Creuses / Pleines » en haut à droite.
Fin de la séance — appli d'une lampe de luminothérapie — Gradient Shift exemple 3

③ Fin de la séance — appli d'une lampe de luminothérapie

QuandLa séance démarrée à 6 h 30 atteint ses 30 minutes à 10 000 lux : le fond sombre passe à l'or chaud et l'anneau de progression se remplit dans le même temps.
PourquoiLa couleur chaude finale correspond à la lumière reçue : l'utilisateur, les yeux à demi fermés, sait que la séance est terminée sans regarder le chiffre.
RéglagesDégradés remplacés (brun profond #0c0a09 → #292524, or #fff7d6 → #f59e0b) ; halo de 200 px derrière l'anneau ; anneau SVG dont stroke-dashoffset suit la même durée de 0,8 s.

Comment ça marche

La scène .th-gradient-scene (300 × 220 px, coins de 16 px) porte un fond .th-gradient-bg en position: absolute; inset: 0 : linear-gradient(135deg, #0f172a, #1e1b4b, #312e81), une nuit qui va du bleu ardoise à l'indigo. Par-dessus, son pseudo-élément ::after couvre la même surface avec le dégradé doré linear-gradient(135deg, #fef3c7, #fde68a, #fcd34d), à opacité 0. Au centre, la couche de contenu (z-index: 1) aligne en colonne un halo de 80 px, le titre en 1,2 rem gras et une phrase. Le halo suit le même principe : un radial-gradient violet à 40 % dessous, un ambre à 50 % dans son ::after, invisible au repos.

Un dégradé ne s'interpole pas d'une valeur à l'autre : déclaré directement à la place du premier sous .active, il remplace l'ancien d'un coup (mesuré : dégradé final affiché 60 ms après le clic dans Chromium et Firefox, malgré une transition de 0,8 s). D'où les deux calques : .active fait passer l'opacité des deux ::after de 0 à 1 avec transition: opacity .8s, pendant que le titre va de #fff à #78350f et la phrase de blanc à 50 % à #92400e (transition: color .8s). Comme les deux dégradés ont la même géométrie et que le calque doré est opaque, le mélange à chaque pixel est exactement celui qu'on obtiendrait si chaque couleur glissait vers la sienne. Mesuré 300 ms après le clic : calque doré à 0,65 d'opacité dans Chromium 151, 0,61 dans Firefox 153, 0,66 dans WebKit 26, puis 1 à 1,5 s ; le second clic refait le chemin vers la nuit.

Le script (0,6 Ko) arme chaque .th-gradient-scene déclarée role="button" : clic, Entrée et Espace basculent .active et aria-pressed. Sans ce rôle, la scène n'est pas touchée et vous posez la classe depuis votre propre contrôle (un choix de créneau, une heure, une fin de minuterie), comme dans les exemples. Les deux dégradés se remplacent en CSS sans toucher au reste : seules les deux règles background du fond et de son ::after décident de l'ambiance. L'opacité est animée par le compositeur, sans repeindre les dégradés à chaque image. L'effet ne lit pas prefers-color-scheme et ne mémorise rien.

Accessibilité

  • Clavier et rôle : la scène de démonstration est un role="button" focalisable nommé « Ambiance dorée », avec aria-pressed. Mesuré : atteinte à la touche Tab dans Chromium et WebKit, basculée par Entrée et Espace dans les trois moteurs ; contour ambre de 2 px au focus clavier. En production, préférez un bouton visible qui pilote l'ambiance.
  • Mouvement réduit : rien ne se déplace ; sous prefers-reduced-motion: reduce, le fondu et les couleurs de texte passent en 150 ms. Mesuré : calque doré à 0,67 (Chromium) et 0,35 (Firefox) d'opacité 60 ms après le clic, 1 à 300 ms.
  • Contraste : sur la nuit, phrase à 5,0:1 et titre blanc bien au-delà ; sur l'or, titre #78350f à 7,3:1 et phrase #92400e à 5,7:1. Pendant les 0,8 s, texte et fond traversent ensemble des tons moyens : évitez de basculer pendant qu'on lit une information critique. La couleur seule ne doit pas porter le sens (heures creuses ou pleines) : gardez un libellé.

Compatibilité navigateur

CSS (pseudo-élément ::after, transitions d'opacity et de color) + 0,6 Ko de JavaScript, aucune dépendance, ni @property ni préfixe. Mesuré dans Chromium 151, Firefox 153 et WebKit 26 : même fondu continu, mêmes valeurs à quelques centièmes près, même retour. Les transitions d'opacité sur pseudo-élément sont bien plus anciennes ; le plancher vient de inset: 0, qui étend le dégradé sur toute la scène : Chrome et Edge 87, Firefox 66, Safari 14.1 (iOS 14.5).

Chrome 87+✓ Complet
Firefox 66+✓ Complet
Safari 14.1+✓ Complet
Edge 87+✓ Complet
Mobile iOS 14.5+✓ Complet
Android Chrome 87+✓ Complet

Sans JavaScript, la scène reste sur la nuit et ne réagit pas ; poser active dans le HTML sert directement l'ambiance dorée.

Le code

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

index.html — structure
<div class="th-gradient-root">
  <div class="th-gradient-scene" role="button" tabindex="0" aria-pressed="false" aria-label="Ambiance dorée">
    <div class="th-gradient-bg"></div>  <!-- nuit + ::after doré -->
    <div class="th-gradient-content">
      <div class="th-gradient-orb"></div>  <!-- halo + ::after ambre -->
      <h3>…</h3>
      <p>…</p>
    </div>
  </div>
</div>
Débloquer le code complet — 9,90 € TTC/mois

Le code complet HTML + CSS + JS de Gradient Shift, prêt à coller — et les 840 effets. Ou 299 € TTC une fois, accès à vie.

Personnaliser

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

Option / propriétéDéfautEffet
Les deux ambiances (CSS — background de .th-gradient-bg et de .th-gradient-bg::after) nuit #0f172a → #312e81, or #fef3c7 → #fcd34d, à 135° N'importe quels dégradés fonctionnent ; gardez la même géométrie (angle, positions des arrêts) dans les deux pour un passage qui ressemble à un glissement de couleurs plutôt qu'à une superposition.
Halo (CSS — .th-gradient-orb et son ::after) 80 px, violet à 40 % puis ambre à 50 % Agrandissez-le (150 à 200 px) pour un soleil ou une lune ; supprimez-le pour un fond uni.
Couleurs des textes (CSS — h3 et p sous .active) #78350f et #92400e sur l'or Vérifiez 4,5:1 sur la zone du dégradé la plus proche du texte, pas seulement sur sa couleur moyenne : pour ces textes foncés, c'est la plus foncée, #fcd34d, où #92400e tombe à 4,92:1 (6,37:1 sur #fef3c7).
Durée (CSS — .8s sur le fondu et les couleurs) 0,8 s Une ambiance supporte 1,2 s ; en dessous de 0,4 s, le changement ressemble à un saut.
Déclencheur (HTML — role="button" sur la scène) la scène entière est le bouton Retirez role, tabindex et aria-pressed et posez .active depuis votre contrôle : le script ne touche plus la scène.
Mouvement réduit (CSS — transition-duration: .15s) 150 ms 0s pour un changement instantané.

FAQ

Les deux donnent un passage continu. Avec @property, on déclare chaque couleur d'arrêt comme <color> (--g1, --g2, --g3) et on anime ces variables ; cela demande trois déclarations par dégradé, et le dégradé saute dans les navigateurs sans @property (avant Chrome 85, Safari 16.4 et Firefox 128). Le calque en fondu marche partout, n'anime que l'opacité, et, les deux dégradés ayant la même géométrie, donne à chaque pixel le même mélange. Il ne sait en revanche passer qu'entre deux ambiances par pseudo-élément.
Ajoutez un élément par ambiance dans .th-gradient-bg, chacun en position: absolute; inset: 0 avec son dégradé et transition: opacity .8s, et ne rendez opaque que celui de l'ambiance courante (une classe par état, par exemple .is-noon). Le fond de base reste visible quand tous les calques sont à 0.
Oui, c'est votre code qui décide quand poser active : retirez role="button" de la scène pour qu'elle ne réagisse plus au clic. Au chargement, lisez l'heure (var h = new Date().getHours(); scene.classList.toggle('active', h >= 6 && h < 22);) avant le premier affichage, sinon le fondu se joue à l'ouverture ; puis programmez la bascule suivante avec un setTimeout calculé jusqu'à 6 h ou 22 h : posée en direct, la classe joue le fondu de 0,8 s sous les yeux de l'utilisateur. Un onglet en veille retarde les minuteries : refaites le calcul à l'évènement visibilitychange. L'effet ne lit pas prefers-color-scheme : c'est une ambiance liée à un contenu, pas un thème d'interface.