Lightbox
A modal gallery used to display media assets and content.
Projects /
A modal gallery used to display media assets and content.
The Lightbox component is used to create modal galleries. It allows for different type of content: media elements (image/video/iframe) with or without a caption, and text content.
To connect the Lightbox to its trigger (e.g., button), make sure the id value of the first one is equal to the aria-controls value of the second one.
If you want to open a specific slide, add to the trigger a data-lightbox-item equal to the id of the slide you want to show first.
<button data-lightbox-item="slide-1" aria-controls="lightboxExample">Show Lightbox</button>
<div class="modal lightbox js-modal js-lightbox" id="lightboxExample" data-animation="on">
<div class="lightbox__content">
<header class="lightbox__header">
<!-- ... -->
</header>
<div class="lightbox__body slideshow slideshow--transition-fade js-lightbox__body" data-swipe="on" data-navigation="off">
<p class="sr-only">Modal Gallery Slideshow</p>
<ul class="slideshow__content js-lightbox__slideshow">
<li id="slide-1" class="slideshow__item js-slideshow__item">
<!-- ... -->
</li>
<!-- ... -->
</ul>
</div>
</div>
</div>
The Lightbox gallery is based on the Slideshow component. Some of its features are:
data-swipe='on' to the .lightbox__body element;.slideshow--transition-fade class to the .lightbox__body element) or slide effect (add the .slideshow--transition-slide class).If you want to lazy load the media items (images/videos/iframes) in the gallery, you can:
data-src equal to the path of the asset you want to load;src attribute equal to a placeholder image path (visible while the image is being loaded).You can show different type of content in your modal gallery. Here's the list of content you can use.
For images, the <li> element will look like:
<li class="slideshow__item js-slideshow__item">
<figure class="lightbox__media" data-media="img">
<div class="lightbox__media-outer js-lightbox__media-outer">
<div class="lightbox__media-inner js-lightbox__media-inner">
<img data-src="img-path.jpg" src="preview.svg" alt="Image Info">
</div>
</div>
<figcaption class="lightbox__caption">Caption for image</figcaption>
</figure>
</li>
For videos, the <li> element will look like:
<li class="slideshow__item js-slideshow__item">
<figure class="lightbox__media" data-media="video">
<div class="lightbox__media-outer js-lightbox__media-outer">
<div class="lightbox__media-inner aspect-ratio-16:9 js-lightbox__media-inner">
<video data-src="video-path.mp4" autoplay loop muted playsInline></video>
</div>
</div>
<figcaption class="lightbox__caption">Caption for image</figcaption>
</figure>
</li>
For iframes, the <li> element will look like:
<li class="slideshow__item js-slideshow__item">
<figure class="lightbox__media" data-media="video">
<div class="lightbox__media-outer js-lightbox__media-outer">
<div class="lightbox__media-inner aspect-ratio-16:9 js-lightbox__media-inner">
<iframe data-src="https://www.youtube.com/embed/mYocfuqu2A8"></iframe>
</div>
</div>
<figcaption class="lightbox__caption">Caption for image</figcaption>
</figure>
</li>
The Lightbox gallery can include text items. The <li> element will look like:
<li class="slideshow__item js-slideshow__item">
<div class="lightbox__text-outer text-component max-width-sm">
<div class="lightbox__text">
<!-- content here -->
</div>
</div>
</li>
If you want to add a thumbnail preview for each item in the gallery, set a data-thumb equal to the path of the preview. Each item of the gallery will require a data-thumb attribute.
The <li> element will look like:
<li class="slideshow__item js-slideshow__item">
<figure class="lightbox__media" data-media="img">
<div class="lightbox__media-outer js-lightbox__media-outer">
<div class="lightbox__media-inner js-lightbox__media-inner">
<img data-src="img-path.jpg" src="preview.svg" data-thumb="thumb-img-path.jpg" alt="Image Info">
</div>
</div>
<figcaption class="lightbox__caption">Caption for image</figcaption>
</figure>
</li>
To display the image thumbnails, you'll need to include the footer.js-lightbox_footer (where the list of thumbnails will be created in JavaScript). Take a look at the demo HTML for more details. If you don't include this element, the thumbnails won't be viisble.
If your lightbox gallery is dynamically added to your page, you can initialize it using the Lightbox object:
var dynamicLightbox = document.getElementsByClassName('js-dynamic-lightbox');
new Lightbox(dynamicLightbox[0]);
⭐️ Icons by Nucleoapp.
🌅 Demo photos: