Transitions✨ Premium

Wipe Transition

Le nouveau thème recouvre l'ancien de gauche à droite en 0,6 s, découpé par clip-path: inset(), et un trait lumineux de 3 px suit la frontière au pixel près : on voit l'avant et l'après en même temps, et où passe la limite. Un second geste fait repartir le front vers la gauche ; fondu de 150 ms si l'utilisateur réduit les animations.

CSSWipeclip-path

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

Pupitre en mode concert — appli de partitions d'un orchestre — Wipe Transition exemple 1

① Pupitre en mode concert — appli de partitions d'un orchestre

QuandJuste avant l'entrée en scène, les violons II sont sur l'Allegretto de la 7e de Beethoven, page 4 : le musicien bascule la partition claire de répétition en partition sombre pour la scène.
PourquoiLe front avance comme une page qu'on recouvre et le trait montre où en est la bascule ; les portées ne bougent pas d'un pixel pendant 0,6 s, donc le musicien ne perd pas sa mesure.
RéglagesCalques inversés : partition claire #fbf8f1 dessous, partition sombre #141210 révélée ; scène de 496 × 324 px ; même SVG de portées dans les deux calques en currentColor ; interrupteur « Mode concert » posé au-dessus des calques, en bas à gauche.
Version haut contraste — site d'une caisse de retraite — Wipe Transition exemple 2

② Version haut contraste — site d'une caisse de retraite

QuandUn usager malvoyant consulte son relevé de carrière (148 trimestres sur 172) et active « Contraste renforcé » en haut à droite : la page standard laisse place à une version noir sur blanc à bordures de 2 px.
PourquoiPendant le balayage, la frontière nette montre l'avant et l'après côte à côte : l'usager voit que ce sont les mêmes informations, au même endroit, seulement plus lisibles.
RéglagesScène pleine page, 540 × 360 px ; calque révélé blanc, textes noirs, bordures de 2 px, accents jaunes #ffd400 sur le bandeau et le bouton ; interrupteur au-dessus des calques.
Mode piste vers mode route — tableau de bord d'une moto électrique — Wipe Transition exemple 3

③ Mode piste vers mode route — tableau de bord d'une moto électrique

QuandEn sortant du circuit, le pilote presse le bouton MODE du commodo : l'affichage sombre de piste, accents rouges, laisse place à l'affichage clair de route, accents bleus, à 87 km/h.
PourquoiLe balayage horizontal se lit d'un coup d'œil et le trait lumineux reste visible même en plein soleil ; la vitesse et l'autonomie ne bougent pas pendant la bascule.
RéglagesSens de l'effet conservé (sombre dessous, clair révélé) ; écran de 460 × 230 px aux coins hauts de 40 px ; gros chiffre en 86 px ; bouton physique MODE sous l'écran qui pilote la classe active.

Comment ça marche

La scène .th-wipe-scene (300 × 220 px, coins de 16 px, overflow: hidden) superpose deux calques de sa taille exacte, en position: absolute; inset: 0 : .th-wipe-dark (fond #0c0a09) dessous, .th-wipe-light (fond #fff7ed) dessus, chacun avec sa version du titre, de la phrase et des pastilles, centrés en colonne. Au repos, le calque clair est rogné à droite sur toute sa largeur : clip-path: inset(0 100% 0 0). La classe .active le ramène à inset(0) avec transition: clip-path .6s cubic-bezier(.4, 0, .2, 1) : sa partie visible s'étend du bord gauche jusqu'au bord droit, sans que rien ne glisse — le texte reste immobile, seule la limite avance.

Le trait est un troisième calque, .th-wipe-line, de la largeur de la scène et sans réaction au pointeur (pointer-events: none), dont le pseudo-élément ::before dessine sur son bord gauche une barre de 3 px en dégradé violet-rose avec un halo de 12 px. Il passe de translateX(0) à translateX(100%) — 100 % de sa propre largeur, donc de la scène — avec la même durée et la même courbe que le découpage. Le déplacement passe par transform, que le navigateur anime sans recalculer la mise en page. Mesuré toutes les 80 ms : front et trait à la même position au dixième de pixel dans Chromium 151 et Firefox 153 (192,2 / 192,2 px à 240 ms) ; dans WebKit 26, le trait devance le front de 1 à 11 px en milieu de course.

Le script (0,6 Ko) arme chaque .th-wipe-scene déclarée role="button" : clic, Entrée et Espace basculent .active et mettent aria-pressed à jour. Retirer la classe rejoue tout à l'envers : le front repart vers la gauche avec son trait (mesuré 67 px dans Chromium, 91 px dans Firefox 300 ms après le second clic). Une scène sans role="button" n'est pas armée : c'est la façon prévue de piloter la bascule depuis votre propre interrupteur, comme dans les exemples ci-dessous. Au repos, le trait reste visible le long du bord gauche ; une fois la bascule faite, il sort à droite, masqué par la scène. L'effet ne lit pas prefers-color-scheme et ne mémorise rien : c'est vous qui décidez de l'état de départ.

Accessibilité

  • Clavier et rôle : la scène de démonstration est un role="button" focalisable (tabindex="0"), nommé « Thème clair », avec aria-pressed. Mesuré : atteinte à la touche Tab dans Chromium et WebKit, basculée par Entrée et par Espace dans les trois moteurs ; contour violet de 2 px au focus clavier. Dans une vraie interface, préférez un <button> visible qui pilote la scène (voir les exemples) : un panneau entier cliquable se devine mal.
  • Contenu en double : les deux calques portent le même texte et le calque clair est marqué aria-hidden. Sur la démo, le nom du bouton couvre la lecture ; si vous pilotez la scène depuis un bouton séparé, alternez aria-hidden entre les deux calques à chaque bascule, comme le font les exemples.
  • Mouvement réduit : sous prefers-reduced-motion: reduce, ni balayage ni trait (masqué) ; le calque clair arrive en fondu d'opacité de 150 ms. Mesuré : opacité 0,39 (Chromium) et 0,22 (Firefox) 60 ms après le clic, 1 à 300 ms.
  • Contraste : sur le clair, la phrase est en #78716c (4,5:1 sur #fff7ed) et les pastilles à 4,0:1 ; sur le sombre, phrase à 5,3:1. Le trait lumineux n'est qu'un repère visuel : aucune information ne passe par sa seule couleur.

Compatibilité navigateur

CSS (clip-path: inset() animé, transform, pseudo-élément, :focus-visible) + 0,6 Ko de JavaScript, aucune dépendance. Mesuré dans Chromium 151, Firefox 153 et WebKit 26 : calques superposés, même aller-retour, mêmes touches ; synchronisation trait/front exacte dans Chromium et Firefox, écart de 1 à 11 px dans WebKit. clip-path avec inset() et transition existe sans préfixe depuis Chrome 55, Firefox 54 et Safari 12.1. Le plancher vient de inset: 0, qui superpose les calques : Chrome et Edge 87, Firefox 66, Safari 14.1 (iOS 14.5).

Chrome 87+✓ Complet
Firefox 66+✓ Complet
Safari 14.1+✓ Complet (trait en léger avance)
Edge 87+✓ Complet
Mobile iOS 14.5+✓ Complet (trait en léger avance)
Android Chrome 87+✓ Complet

Sans clip-path, le calque clair n'est jamais rogné : la scène reste claire et seul le trait traverse. Sans JavaScript, la scène reste sombre et ne réagit pas ; poser active dans le HTML sert directement le clair.

Le code

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

index.html — structure
<div class="th-wipe-root">
  <div class="th-wipe-scene" role="button" tabindex="0" aria-pressed="false" aria-label="Thème clair">
    <div class="th-wipe-dark">
      <h3>…</h3><p>…</p>
      <div class="th-wipe-chips">…</div>
    </div>
    <div class="th-wipe-light" aria-hidden="true">
      <h3>…</h3><p>…</p>
      <div class="th-wipe-chips">…</div>
    </div>
    <div class="th-wipe-line" aria-hidden="true"></div>
  </div>
</div>
Débloquer le code complet — 9,90 € TTC/mois

Le code complet HTML + CSS + JS de Wipe Transition, 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
Durée et courbe (CSS — transition de .th-wipe-light et de .th-wipe-line) .6s cubic-bezier(.4, 0, .2, 1) Changez les deux valeurs ensemble, sinon le trait se détache du front. 0,9 s pour une page lourde de sens, 0,4 s pour une bascule rapide.
Sens du balayage (CSS — clip-path de repos et translateX) de gauche à droite : inset(0 100% 0 0) De droite à gauche : inset(0 0 0 100%) au repos, et le trait de translateX(100%) à translateX(0), dessiné sur le bord gauche. De haut en bas : inset(0 0 100% 0) et un trait horizontal en translateY.
Trait (CSS — .th-wipe-line::before) 3 px, dégradé #8b5cf6 → #ec4899, halo de 12 px 1 px sans halo pour un rendu sobre ; 6 px pour un affichage vu de loin. Supprimer .th-wipe-line donne un balayage sans repère.
Couleurs des deux thèmes (CSS — fonds de .th-wipe-dark / .th-wipe-light, puis titres, phrases, pastilles) #0c0a09 et #fff7ed Chaque calque a ses règles de texte ; vérifiez 4,5:1 sur la phrase secondaire de chacun.
Déclencheur (HTML — role="button" sur la scène) la scène entière est le bouton Retirez role, tabindex et aria-pressed de la scène, et basculez .active depuis votre propre bouton : le script ne touche plus la scène.
Mouvement réduit (CSS — bloc @media (prefers-reduced-motion: reduce)) fondu de 150 ms, trait masqué transition: none pour un changement instantané.

FAQ

Parce qu'un translateX en pourcentage se rapporte à la largeur de l'élément lui-même : une barre de 3 px ne pourrait avancer que de 3 px pour 100 %. Un calque aussi large que la scène, qui dessine la barre sur son bord gauche, avance exactement de la largeur de la scène, quelle qu'elle soit, et suit le front sans pixel codé en dur. Animer left donnerait le même tracé, mais en recalculant la mise en page à chaque image.
Le balayage fait demi-tour là où il en est, sans saut : une transition CSS interrompue repart vers l'état demandé depuis sa position du moment. Mesuré avec un second clic 300 ms après le premier, dans Chromium 151 et Firefox 153 : le front, alors à environ 230 px sur 300, revient au bord gauche en un peu moins d'une demi-seconde, plus vite qu'un aller complet, et le trait reste collé au front au dixième de pixel. La scène finit sombre avec aria-pressed="false" : l'état suit toujours le dernier clic. Si vous préférez ignorer les clics pendant le balayage, attendez l'évènement transitionend du calque clair avant d'accepter le suivant.
Les deux superposent deux calques complets et en rognent un. Dark Mode fait grandir le nouveau thème en cercle depuis l'interrupteur : le geste et le changement sont liés. Wipe Transition le fait avancer en ligne droite avec un trait sur la frontière : pendant 0,6 s, l'avant et l'après sont côte à côte, ce qui aide quand la bascule change la lisibilité (contraste renforcé, affichage de route) ou quand elle n'a pas de point de départ visible.