Galerie✨ Premium

Gallery Flow Morph

Six tuiles éparpillées qui dérivent et suivent la souris ; un clic transforme la tuile en vue plein cadre, puis Échap la renvoie à sa place.

View TransitionsVanilla JSGalerie

Mis à jour le

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

3 exemples d'usage

La planche d'ambiances d'un architecte d'intérieur — Gallery Flow Morph exemple 1

① La planche d'ambiances d'un architecte d'intérieur

QuandSur le site de l'atelier Lumbrane, la page d'un appartement montre six pièces (salon, cuisine, chambre, salle de bain, bureau, entrée) en vignettes éparpillées sur un fond lin. Un clic sur une pièce l'agrandit sur toute la planche avec son nom ; ✕ ou Échap la remettent à sa place.
PourquoiLa disposition libre rappelle une vraie planche épinglée au mur, et le morph garde le lien entre la vignette et la grande image : on sait toujours d'où vient ce qu'on regarde.
RéglagesSix <img> (illustrations SVG) dans les tuiles, scène sans proportions imposées (aspect-ratio: auto, hauteur du bloc), fond lin et visionneuse claire (CSS de la scène), noms posés sur une étiquette sombre pour rester lisibles. La capture clique la vignette « Salle de bain ».
L'écran de fin d'un jeu de mémoire — Gallery Flow Morph exemple 2

② L'écran de fin d'un jeu de mémoire

QuandPartie gagnée dans Souvenelle : à gauche, les six paires trouvées (renard, chouette, poisson…) flottent dans un cadre de 330 × 206 px ; à droite, le score (6/6, 1:42, 14 coups) et le bouton Rejouer. L'enfant ouvre une carte pour la revoir en grand.
PourquoiLes cartes gagnées deviennent une petite collection qu'on manipule : la dérive leur donne de la vie, l'ouverture en grand récompense la partie sans quitter l'écran de score.
RéglagesGalerie à --gfm-max-width: none et format 330/206, cartes illustrées en <img>, cadre translucide violet. La capture ouvre la carte « Abeille ».
Le fond animé d'une biennale de design — Gallery Flow Morph exemple 3

③ Le fond animé d'une biennale de design

QuandPage d'accueil de la biennale de Quarvenne : les six affiches d'exposition couvrent tout l'écran et glissent avec la souris ; un encart blanc en haut à gauche donne les dates, le nombre de lieux et le bouton Billetterie. Cliquer une affiche l'ouvre en grand avec le titre de l'exposition.
PourquoiLe fond n'est pas une image figée : il réagit au moindre mouvement et chaque affiche est une porte d'entrée vers son exposition. L'encart opaque garde les informations pratiques lisibles par-dessus.
RéglagesRacine à pleine hauteur, coins droits, aspect-ratio: auto ; encart posé au-dessus de la galerie, tuiles replacées hors de l'encart (.gfm-tile:nth-child(n) redéfini par la CSS de la scène) et encart masqué pendant qu'une affiche est ouverte. Dans la capture, la souris décrit une ellipse (parallaxe) puis ouvre l'affiche « Trames ». La scène recopie le nom affiché de la tuile dans data-title juste avant le clic, pour que le titre suive la langue de la capture.

Comment ça marche

Dans .gfm-scene (format 16/10, 560 px de large au plus), les six boutons .gfm-tile sont placés en pourcentages et montent ou descendent doucement de quelques pixels (animation gfm-drift de 7 s en aller-retour). Quand le pointeur bouge sur la scène, le script pose --px et --py (position de -0,5 à 0,5) et chaque tuile se décale de 14 px au plus dans la direction fixée par ses variables --dx / --dy : une parallaxe légère, différente d'une tuile à l'autre.

Un clic (ou Entrée) sur une tuile ouvre la visionneuse .gfm-viewer : la tuile et la grande image .gfm-hero partagent le temps de la transition un même view-transition-name, et l'API View Transitions anime le passage de l'une à l'autre en 0,45 s. Le titre (data-title) apparaît lettre par lettre sous l'image. ✕, un clic sur le fond sombre ou Échap referment par le même mouvement inversé et rendent le focus à la tuile d'origine. Sans View Transitions, la visionneuse s'ouvre et se ferme en fondu (0,3 s et 0,25 s).

Les tuiles acceptent vos images : une <img> dans la tuile la couvre, et la visionneuse affiche la même image en grand, ou la version désignée par data-full si vous en fournissez une plus lourde. Sans image, le dégradé de la variable --art sert de visuel, comme dans la démo. Chaque .fx-0819-root de la page a sa propre galerie.

Accessibilité

  • Tuiles au clavier : ce sont des <button> nommés par leur texte, avec un contour violet au :focus-visible et le même léger agrandissement qu'au survol.
  • Ouverture et fermeture : à l'ouverture, le focus va sur ✕ (« Fermer la vue plein écran ») et les tuiles derrière deviennent inert ; Échap ou ✕ referment et le focus revient sur la tuile cliquée.
  • Titre lu d'un bloc : les lettres animées sont masquées aux lecteurs d'écran (aria-hidden) et le titre complet est annoncé par une copie invisible dans la légende en aria-live="polite".
  • Mouvement réduit : sous prefers-reduced-motion: reduce, pas de dérive, pas de parallaxe, pas de morph ni de fondu, pas d'apparition lettre par lettre : la visionneuse s'ouvre et se ferme directement.
  • Pause de la dérive : un bouton rond en bas à gauche (.gfm-pause, « Mettre la dérive en pause », aria-pressed="true" quand elle est arrêtée) arrête et relance la dérive au clic, au doigt et au clavier ; elle se met aussi en pause au survol de la galerie et tant que le focus clavier y est. En mouvement réduit, il n'y a pas de dérive et le bouton est masqué. Échap ne ferme que la galerie qui a le focus.

Compatibilité navigateur

document.startViewTransition : Chrome 111, Safari 18, Firefox 144 (d'après MDN) ; ailleurs, fondu CSS. Propriétés translate et scale (Chrome 104, Firefox 72, Safari 14.1) et inert (Chrome 102, Firefox 112, Safari 15.5). Mesuré dans Chromium 151, Firefox 153 et WebKit 26.5 (Playwright) : deux galeries dont la 2e pilotée seule, ouverture au clavier, fermeture par Échap avec retour du focus sur la tuile, mouvement réduit, 390 px sans débordement, 0 erreur.

Chrome 111+✓ Complet, morph View Transitions (mesuré)
Firefox 144+✓ Complet ; fondu avant la 144 (mesuré)
Safari 18+✓ Complet ; fondu avant la 18 (mesuré dans WebKit)
Edge 111+✓ Complet (moteur Chromium)
Mobile iOS 18+✓ Moteur WebKit, non vérifié sur appareil
Android Chrome 111+✓ Complet (moteur Chromium)

Sans View Transitions : la visionneuse s'ouvre et se ferme en fondu. Sans JavaScript : les tuiles s'affichent et dérivent, ni le clic ni le bouton pause ne font rien.

Le code

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

index.html — structure
<div class="fx-0819-root">
  <div class="gfm-scene">
    <div class="gfm-field">
      <button class="gfm-tile" type="button" data-title="…" style="--dx: -1; --dy: -0.6"><img src="…" alt=""><span class="gfm-tile-name">…</span></button>
      … (6 tuiles)
    </div>
    <button class="gfm-pause" type="button" aria-pressed="false" aria-label="…"></button>
    <div class="gfm-viewer" hidden>
      <figure class="gfm-hero"></figure>
      <p class="gfm-caption" aria-live="polite"></p>
      <button class="gfm-close" type="button" aria-label="…">✕</button>
    </div>
  </div>
</div>

Paiement unique, sans abonnement — le code est à toi pour toujours

Personnaliser

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

Option / propriétéDéfautEffet
Images (HTML — <img> dans .gfm-tile) aucune : dégradés --art L'image couvre la tuile et s'affiche en grand dans la visionneuse. Laissez alt="" si le nom de la tuile suffit.
Grande version (HTML — data-full sur .gfm-tile) la même image que la tuile Adresse d'une image plus détaillée chargée seulement à l'ouverture.
Titre (HTML — data-title) Aurora, Magma, Océan… Texte affiché lettre par lettre sous l'image et lu par les lecteurs d'écran.
Dérive et parallaxe (HTML — --dx / --dy en style de la tuile) de -1,2 à 1,1 selon la tuile Sens et force du décalage avec la souris (14 px × valeur) et décalage de la dérive.
Bouton pause (HTML — .gfm-pause) affiché en bas à gauche, aria-pressed="false" Arrête ou relance la dérive ; changez son aria-label si vous traduisez. Ne le retirez que si vous supprimez aussi la dérive.
Largeur maximale (CSS — --gfm-max-width) 560px La scène prend la largeur de son conteneur jusqu'à cette limite ; none pour toute la largeur.
Durée du morph (CSS — ::view-transition-old/new(gfm-active)) .45s Vitesse du passage tuile → plein cadre.
Position des tuiles (CSS — .gfm-tile:nth-child(n)) 6 positions en % Coordonnées left / top et largeur de chaque tuile ; à adapter si vous en mettez plus ou moins.

FAQ

Oui, mais les positions sont écrites pour six tuiles (.gfm-tile:nth-child(1) à (6)). Une 7e tuile s'afficherait en haut à gauche par-dessus la première : ajoutez une règle :nth-child(7) avec sa place.
Le morph utilise l'API View Transitions (Chrome 111, Safari 18, Firefox 144). Ailleurs, le fondu prend le relais : même ouverture, même fermeture, sans la transformation de la tuile.
Oui : le bouton rond en bas à gauche l'arrête et la relance (classe gfm-paused sur .gfm-scene), le survol et le focus clavier la mettent aussi en pause, et elle disparaît en mouvement réduit. Pour la supprimer partout, retirez la ligne animation: gfm-drift … de .gfm-tile et le bouton .gfm-pause : la parallaxe à la souris reste.