Galerie✨ Premium

Fullscreen Lightbox

La photo cliquée passe en vrai plein écran du navigateur, sur fond presque noir ; sur iPhone, où ce mode n'existe pas, elle couvre toute la fenêtre.

JSFullscreenImmersive

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

Plans d'une maison projetés en réunion depuis l'espace client d'un architecte — Fullscreen Lightbox exemple 1

① Plans d'une maison projetés en réunion depuis l'espace client d'un architecte

QuandChez Ferandole Architectes, l'ordinateur de la salle est relié au projecteur : l'architecte clique sur le plan du rez-de-chaussée et le plan remplit l'écran projeté, sans barre ni onglet.
PourquoiProjeté, un plan doit occuper toute la surface pour qu'on lise les cotes depuis le fond de la salle ; le vrai plein écran retire tout ce qui distrait.
RéglagesQuatre vignettes au format 4:3 sur une rangée, nom du plan et indice dessous. Pour un plan précis, fournir une image large (au moins 2000 px) ou data-full : l'image n'est jamais agrandie au-delà de sa taille.
Schéma d'une étape de montage d'un meuble en kit — Fullscreen Lightbox exemple 2

② Schéma d'une étape de montage d'un meuble en kit

QuandSur la notice en ligne d'une bibliothèque Tiravelle, l'étape 3 montre un petit schéma ; posée par terre à côté des pièces, la tablette l'affiche en plein écran d'une touche.
PourquoiPendant un montage, on regarde le schéma de loin, les mains prises : le plein écran le rend lisible à un mètre, et ✕ ramène à la liste des étapes.
RéglagesUne seule vignette dans une carte blanche, avec « Plein écran ⤢ » écrit dessous ; --fslb-accent orangé.
Code QR d'un billet électronique présenté au contrôle — Fullscreen Lightbox exemple 3

③ Code QR d'un billet électronique présenté au contrôle

QuandÀ l'entrée du festival Vendemiel, le spectateur touche le code QR de son billet : il s'affiche en grand sur fond sombre, prêt à être scanné.
PourquoiUn code QR petit et entouré de texte se scanne mal ; en grand, isolé, il passe du premier coup. Sur iPhone, le plein écran n'existe pas, mais la visionneuse couvre quand même la fenêtre : le résultat reste utilisable.
RéglagesVignette carrée de 84 px (aspect-ratio: 1 / 1 ajouté par la scène) dans le billet. La capture montre la visionneuse qui couvre la fenêtre : un navigateur de capture n'affiche pas le vrai plein écran.

Comment ça marche

Au clic sur une vignette .fslb-thumb, le script ouvre le <dialog> modal puis demande le plein écran pour .fslb-stage, la scène qu'il contient (un <dialog> lui-même ne peut pas passer en plein écran : les trois moteurs le refusent). La demande part pendant le clic, comme l'exige le navigateur.

En plein écran, barres et onglets disparaissent : la photo s'affiche au plus grand, jusqu'à 90 % de la largeur et 85 % de la hauteur de l'écran, sur rgba(0, 0, 0, 0.98), avec ✕ fixé en haut à droite. Si l'on quitte le plein écran par la touche Échap du navigateur, l'événement fullscreenchange ferme aussi la visionneuse ; ✕ ou un clic sur le noir font les deux à la fois.

Quand le plein écran est refusé (iPhone, page dans une <iframe> sans allow="fullscreen", navigateur ancien), la demande échoue sans bruit et rien d'autre ne change : le dialog occupe déjà toute la fenêtre, seules les barres du navigateur restent visibles. Mesuré en forçant ce refus : scène de 1280 × 800 sur une fenêtre de 1280 × 800.

Accessibilité

  • Boutons et nom : vignettes en <button>, ✕ nommé « Fermer », visionneuse nommée « Visionneuse d'images ».
  • Focus : posé sur ✕ à l'ouverture, gardé dans la visionneuse (page derrière inerte), rendu à la vignette à la fermeture, y compris quand on sort par la touche Échap du plein écran.
  • Échap : en plein écran, le navigateur l'utilise pour quitter ce mode et la visionneuse se ferme avec ; sans plein écran, c'est le script qui ferme.
  • Mouvement réduit : pas de fondu ni d'agrandissement ; le plein écran est demandé de la même façon.
  • Limite : le plein écran retire les repères du navigateur ; gardez ✕ visible (il l'est par défaut) et ne l'ouvrez jamais sans un clic de l'utilisateur.

Compatibilité navigateur

API Fullscreen sans préfixe : Chrome 71, Firefox 64, Safari 16.4 ; sur iOS, iPad seulement (@mdn/browser-compat-data : « Only available on iPad, not on iPhone »). Le reste suit le socle des visionneuses (<dialog> modal : Firefox 98, Safari 15.4). Plein écran obtenu dans Chromium 151, Firefox 153 et WebKit 26.5 ; sortie du plein écran = visionneuse fermée dans les trois.

Chrome 88+✓ Complet (mesuré)
Firefox 98+✓ Complet (mesuré)
Safari 15.4+✓ Complet dès 16.4 (mesuré sur WebKit) ; de 15.4 à 16.3, la visionneuse couvre la fenêtre sans plein écran
Edge 88+✓ Complet (moteur Chromium)
Mobile iOS 15.4+✓ Partiel : pas de plein écran sur iPhone, la visionneuse couvre la fenêtre ; iPad 16.4+ en vrai plein écran
Android Chrome 88+✓ Complet (toucher mesuré)

iPhone, Safari 15.4 à 16.3 et iframe sans autorisation : la visionneuse couvre la fenêtre (position fixe, 100 % × 100 %), l'image garde la même taille maximale. Sans showModal(), rien ne s'ouvre.

Le code

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

index.html — structure
<div class="fx-0176-root">
  <div class="fslb-grid">
    <button type="button" class="fslb-thumb" aria-haspopup="dialog"><img src="photo.jpg" alt="Dégradé ambre vers rouge" width="1920" height="1280"></button>
    <button type="button" class="fslb-thumb" aria-haspopup="dialog"><img src="photo.jpg" alt="Dégradé rose vers violet" width="1920" height="1280"></button>
    <button type="button" class="fslb-thumb" aria-haspopup="dialog"><img src="photo.jpg" alt="Dégradé indigo vers violet" width="1920" height="1280"></button>
    <button type="button" class="fslb-thumb" aria-haspopup="dialog"><img src="photo.jpg" alt="Dégradé cyan vers émeraude" width="1920" height="1280"></button>
  </div>
  <dialog class="fslb-viewer" aria-label="Visionneuse d'images">
    <div class="fslb-stage">
      <button type="button" class="fslb-close" aria-label="Fermer"><svg>…</svg></button>
      <img class="fslb-image" alt="">
    </div>
  </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
Taille maximale de l'image (CSS — .fslb-image) max-width: 90vw; max-height: 85vh L'image n'est jamais agrandie au-delà de sa taille réelle : utilisez des photos larges ou data-full.
Fond de la scène (CSS — .fslb-stage) rgba(0, 0, 0, 0.98) C'est la scène, et non le dialog, qui passe en plein écran : sa couleur est celle qu'on voit.
Position de ✕ (CSS — .fslb-close) fixe, 20 px du haut et de la droite Reste visible en plein écran comme en mode fenêtre.
Vignettes (CSS — --fslb-thumb, --fslb-gap) 120px, 10px Largeur (format 3:2) et écart des boutons dans la page.
Grande image (HTML — data-full) absent Adresse chargée à l'ouverture à la place de la vignette.
Plein écran dans une iframe (HTML — allow="fullscreen") non autorisé par défaut Sans cet attribut sur l'<iframe> qui contient la galerie, le navigateur refuse et la visionneuse reste en mode fenêtre.

FAQ

Safari sur iPhone ne propose pas l'API Fullscreen pour les éléments d'une page (seulement pour les vidéos), alors que l'iPad l'a depuis Safari 16.4. Le script s'en accommode : la visionneuse couvre toute la fenêtre, les barres de Safari restent visibles.
Oui. En plein écran, le navigateur garde Échap pour lui et quitte ce mode ; le script écoute fullscreenchange sur la scène et ferme aussitôt la visionneuse. Hors plein écran, Échap est géré directement.
Pas dans cette version, qui affiche une photo par ouverture. Les flèches et le balayage sont dans la visionneuse avec navigation de la même catégorie.