Galerie✨ Premium

Lightbox with Caption

Visionneuse à flèches avec une légende sous la photo — titre et précision lus dans votre HTML — qui monte en fondu à l'ouverture.

JSCaptionAnimated

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

Fossiles de la collection en ligne d'un muséum, avec l'espèce et l'âge — Lightbox with Caption exemple 1

① Fossiles de la collection en ligne d'un muséum, avec l'espèce et l'âge

QuandSur le site du Muséum de Sornevil, le visiteur filtre les fossiles et ouvre la dent d'Otodus ; la légende donne le genre, la période et l'âge, puis › repart au début de la série, l'ammonite.
PourquoiUne photo de fossile ne dit rien sans son nom et sa date ; la légende sous l'image apporte cette information sans la cacher sous un texte superposé.
RéglagesGrille de quatre vignettes carrées, --clb-backdrop: rgba(20, 18, 15, 0.95). Les légendes sont écrites en data-title / data-desc sur chaque bouton.
Carnet de voyage partagé : l'étape et la date sous chaque paysage — Lightbox with Caption exemple 2

② Carnet de voyage partagé : l'étape et la date sous chaque paysage

QuandLa famille de Léa ouvre la première photo du voyage et suit l'itinéraire avec la flèche droite, du lac au refuge, en lisant le jour sous chaque image.
PourquoiDans un récit de voyage, l'ordre compte : la légende « Jour 4 · 15 juillet » donne le fil, et le clavier permet de dérouler le voyage sans viser.
RéglagesGrille 2 × 2 dans une carte blanche, mention « ← → » sous la grille. Capture : keydown ArrowRight envoyé au dialog.
Photos avant / après dans le rapport d'intervention d'un plombier — Lightbox with Caption exemple 3

③ Photos avant / après dans le rapport d'intervention d'un plombier

QuandDans le rapport n° 2481 de Corvisane Plomberie, le client clique sur la photo de la fuite, puis sur › pour voir le raccord neuf et le chauffe-eau contrôlé.
PourquoiCes photos servent de preuve : la légende « Avant / Après », la date et la pièce sous chaque image évitent toute discussion sur ce qui a été fait.
RéglagesTrois vignettes de 84 px dans le corps du rapport, sous le titre « Photos ». --clb-accent bleu du rapport.

Comment ça marche

La légende vient de deux attributs posés sur chaque bouton .clb-thumb : data-title (le titre, en gras) et data-desc (la ligne grise, lieu, date ou détail). Sans data-title, c'est l'alt de la photo qui sert de titre ; sans data-desc, la seconde ligne est masquée. Changer un texte dans le HTML suffit, le script ne contient aucune légende.

La visionneuse est un <figure> dans un <dialog> modal : la photo, puis un <figcaption>. À l'ouverture, la légende part 20 px plus bas et transparente, puis remonte en 0,4 s après 0,2 s de délai, juste après l'arrivée de l'image. Ensuite, ‹ › (en boucle), ← → et un glissement horizontal de plus de 50 px sur la photo changent l'image et sa légende en même temps.

Pour que la légende reste visible, la photo est limitée à la hauteur de l'écran moins 130 px (et à 80 % de sa largeur). Fermeture par ✕, Échap ou clic sur le fond.

Accessibilité

  • Légende reliée à l'image : <figure> + <figcaption>, et la légende est une région aria-live="polite" : chaque nouvelle légende est lue quand on passe à la photo suivante.
  • Boutons nommés : vignettes, ‹ « Image précédente », › « Image suivante », ✕ « Fermer ».
  • Dialog modal : nom « Visionneuse d'images », focus sur ✕ à l'ouverture, page derrière inerte, focus rendu à la vignette.
  • Mouvement réduit : la légende est affichée directement, sans montée ni fondu, comme l'image.

Compatibilité navigateur

Même socle que les autres visionneuses : <dialog> modal (Chrome 37, Firefox 98, Safari 15.4) et aspect-ratio (Chrome 88). Contrôlé dans Chromium 151, Firefox 153 et WebKit 26.5 : légende changée dans le HTML puis lue à l'ouverture, copie unique ouverte quand deux galeries sont sur la page, script collé deux fois sans saut de légende.

Chrome 88+✓ Complet (mesuré)
Firefox 98+✓ Complet (mesuré)
Safari 15.4+✓ Complet (mesuré sur WebKit)
Edge 88+✓ Complet (moteur Chromium)
Mobile iOS 15.4+✓ Complet (non mesuré sur appareil)
Android Chrome 88+✓ Complet (toucher mesuré)

Sans showModal(), rien ne s'ouvre ; vos textes restent dans les attributs, invisibles. Pour qu'ils soient lus même sans script, répétez-les dans l'alt.

Le code

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

index.html — structure
<div class="fx-0177-root">
  <div class="clb-grid">
    <button type="button" class="clb-thumb" aria-haspopup="dialog" data-title="Aurore boréale" data-desc="Norvège, 2024"><img src="photo.jpg" alt="Dégradé indigo vers violet" width="600" height="400"></button>
    <button type="button" class="clb-thumb" aria-haspopup="dialog" data-title="Coucher de soleil" data-desc="Cyclades, Grèce"><img src="photo.jpg" alt="Dégradé fuchsia vers rose" width="600" height="400"></button>
    <button type="button" class="clb-thumb" aria-haspopup="dialog" data-title="Forêt mystique" data-desc="Amazonie, Brésil"><img src="photo.jpg" alt="Dégradé violet vers cyan" width="600" height="400"></button>
    <button type="button" class="clb-thumb" aria-haspopup="dialog" data-title="Océan Pacifique" data-desc="Hawaï, États-Unis"><img src="photo.jpg" alt="Dégradé cyan vers émeraude" width="600" height="400"></button>
  </div>
  <dialog class="clb-viewer" aria-label="Visionneuse d'images">
    <figure class="clb-content">
      <button type="button" class="clb-close" aria-label="Fermer"><svg>…</svg></button>
      <button type="button" class="clb-nav clb-prev" aria-label="Image précédente"><svg>…</svg></button>
      <img class="clb-image" alt="">
      <button type="button" class="clb-nav clb-next" aria-label="Image suivante"><svg>…</svg></button>
      <figcaption class="clb-caption" aria-live="polite">
        <strong class="clb-title"></strong>
        <span class="clb-desc"></span>
      </figcaption>
    </figure>
  </dialog>
</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
Titre de la légende (HTML — data-title) l'alt de l'image Texte en gras sous la photo.
Seconde ligne (HTML — data-desc) vide (ligne masquée) Lieu, date, auteur… en gris sous le titre.
Hauteur laissée à la légende (CSS — max-height de .clb-image) calc(80vh - 130px) Augmentez les 130 px pour des légendes sur plusieurs lignes.
Montée de la légende (CSS — .clb-caption) 20 px, 0,4 s après 0,2 s transform et transition de départ ; à mettre à zéro pour une légende fixe.
Couleur de la seconde ligne (CSS — .clb-desc) #8b8b93 Gris qui reste lisible sur le fond noir.
Vignettes et voile (CSS — --clb-thumb, --clb-backdrop) 120px, rgba(0, 0, 0, 0.9) Largeur des boutons de la page et fond de la visionneuse.
Grande photo (HTML — data-full) absent Adresse chargée dans la visionneuse à la place de la vignette.

FAQ

Sur chaque bouton : <button class="clb-thumb" data-title="Viaduc de Corlanne" data-desc="Mai 2024">. Le script les lit au moment où la photo s'affiche ; il n'y a rien à modifier dans le JavaScript.
Non : les attributs sont copiés comme du texte brut (textContent), ce qui empêche aussi d'y glisser du code par erreur. Pour une légende riche, il faudrait remplacer textContent par votre propre gabarit.
Non, seulement à l'ouverture. Ensuite le texte change en même temps que la photo, sans animation, pour ne pas ralentir la lecture d'une série.