Lightbox
Angular Bootstrap 5 Lightbox component
Responsive lightbox built with Bootstrap 5, Angular and Material Design. Lightbox is a responsive gallery with the option to enlarge selected photos.
MDB lightbox is a group of images combined in one responsive gallery. Elements are grouped in a thumbnail grid, which can be displayed as a slideshow.
Note: Read the API tab to find all available options and advanced customization
Basic example
A basic example of a lightbox with the most common use case with the bootstrap grid.
<mdb-lightbox class="lightbox">
<div class="row">
<div class="col-lg-4">
<img
mdbLightboxItem
src="https://mdbootstrap.com/img/Photos/Thumbnails/Slides/1.webp"
[img]="'https://mdbootstrap.com/img/Photos/Slides/1.webp'"
alt="Lightbox image 1"
class="w-100"
/>
</div>
<div class="col-lg-4">
<img
mdbLightboxItem
src="https://mdbootstrap.com/img/Photos/Thumbnails/Slides/2.webp"
[img]="'https://mdbootstrap.com/img/Photos/Slides/2.webp'"
alt="Lightbox image 2"
class="w-100"
/>
</div>
<div class="col-lg-4">
<img
mdbLightboxItem
src="https://mdbootstrap.com/img/Photos/Thumbnails/Slides/3.webp"
[img]="'https://mdbootstrap.com/img/Photos/Slides/3.webp'"
alt="Lightbox image 3"
class="w-100"
/>
</div>
</div>
</mdb-lightbox>
Image optimization
To ensure the proper performance of the page, it is recommended to include thumbnails of
images in the src attribute. Then in the
img
input add the path to the image with higher resolution. If the
img
input is omitted, the lightbox will display the same image as in
the reduced size.
<img
mdbLightboxItem
src="https://mdbootstrap.com/img/Photos/Thumbnails/Slides/3.webp"
[img]="'https://mdbootstrap.com/img/Photos/Slides/3.webp'"
alt="Lightbox image 3"
class="w-100"
/>
Shadows and rounded corners
You can improve the look of the images by adding shadows and rounded corners.
<mdb-lightbox class="lightbox">
<div class="row">
<div class="col-lg-4">
<img
mdbLightboxItem
src="https://mdbootstrap.com/img/Photos/Thumbnails/Slides/1.webp"
[img]="'https://mdbootstrap.com/img/Photos/Slides/1.webp'"
alt="Lightbox image 1"
class="w-100 shadow-1-strong rounded"
/>
</div>
<div class="col-lg-4">
<img
mdbLightboxItem
src="https://mdbootstrap.com/img/Photos/Thumbnails/Slides/2.webp"
[img]="'https://mdbootstrap.com/img/Photos/Slides/2.webp'"
alt="Lightbox image 2"
class="w-100 shadow-1-strong rounded"
/>
</div>
<div class="col-lg-4">
<img
mdbLightboxItem
src="https://mdbootstrap.com/img/Photos/Thumbnails/Slides/3.webp"
[img]="'https://mdbootstrap.com/img/Photos/Slides/3.webp'"
alt="Lightbox image 3"
class="w-100 shadow-1-strong rounded"
/>
</div>
</div>
</mdb-lightbox>
Different sizes
Loaded images can have any aspect ratio. Their size will be automatically adjusted to the window when you open the lightbox.
<mdb-lightbox class="lightbox">
<div class="row">
<div class="col-lg-6">
<img
mdbLightboxItem
src="https://mdbootstrap.com/img/Photos/Thumbnails/Slides/1.webp"
[img]="'https://mdbootstrap.com/img/Photos/Slides/1.webp'"
alt="Lightbox image 1"
class="w-100"
/>
<img
mdbLightboxItem
src="https://mdbootstrap.com/img/Photos/Thumbnails/Square/1.webp"
[img]="'https://mdbootstrap.com/img/Photos/Square/1.webp'"
alt="Lightbox image 2"
class="w-100"
/>
</div>
<div class="col-lg-6">
<img
mdbLightboxItem
src="https://mdbootstrap.com/img/Photos/Thumbnails/Vertical/1.webp"
[img]="'https://mdbootstrap.com/img/Photos/Vertical/1.webp'"
alt="Lightbox image 3"
class="w-100"
/>
</div>
</div>
</mdb-lightbox>
Zoom level
The zoomLevel
input allows you to define the size of a single zoom
in / zoom out.
<mdb-lightbox class="lightbox" [zoomLevel]="0.25">
<div class="row">
<div class="col-lg-4">
<img
mdbLightboxItem
src="https://mdbootstrap.com/img/Photos/Thumbnails/Slides/1.webp"
[img]="'https://mdbootstrap.com/img/Photos/Slides/1.webp'"
alt="Lightbox image 1"
class="w-100"
/>
</div>
<div class="col-lg-4">
<img
mdbLightboxItem
src="https://mdbootstrap.com/img/Photos/Thumbnails/Slides/2.webp"
[img]="'https://mdbootstrap.com/img/Photos/Slides/2.webp'"
alt="Lightbox image 2"
class="w-100"
/>
</div>
<div class="col-lg-4">
<img
mdbLightboxItem
src="https://mdbootstrap.com/img/Photos/Thumbnails/Slides/3.webp"
[img]="'https://mdbootstrap.com/img/Photos/Slides/3.webp'"
alt="Lightbox image 3"
class="w-100"
/>
</div>
</div>
</mdb-lightbox>
Disabled image
By adding a lightbox-disabled
class to any image, you can exclude it from your
lightbox. In the example below, the third image has been disabled.
<mdb-lightbox class="lightbox">
<div class="row">
<div class="col-lg-3">
<img
mdbLightboxItem
src="https://mdbootstrap.com/img/Photos/Thumbnails/Slides/1.webp"
[img]="'https://mdbootstrap.com/img/Photos/Slides/1.webp'"
alt="Lightbox image 1"
class="w-100"
/>
</div>
<div class="col-lg-3">
<img
mdbLightboxItem
src="https://mdbootstrap.com/img/Photos/Thumbnails/Slides/2.webp"
[img]="'https://mdbootstrap.com/img/Photos/Slides/2.webp'"
alt="Lightbox image 2"
class="w-100"
/>
</div>
<div class="col-lg-3">
<img
mdbLightboxItem
src="https://mdbootstrap.com/img/Photos/Thumbnails/Slides/3.webp"
[img]="'https://mdbootstrap.com/img/Photos/Slides/3.webp'"
[disabled]="true"
alt="Lightbox image 3"
class="w-100"
/>
</div>
<div class="col-lg-3">
<img
mdbLightboxItem
src="https://mdbootstrap.com/img/Photos/Thumbnails/Slides/4.webp"
[img]="'https://mdbootstrap.com/img/Photos/Slides/4.webp'"
alt="Lightbox image 3"
class="w-100"
/>
</div>
</div>
</mdb-lightbox>
Outside access
The lightbox can be successfully operated via TypeScript. There are many public methods
available such as open
, slide
, zoomIn
,
zoomOut
, or close
. All are described in the API tab.
<mdb-lightbox #lightbox class="lightbox">
<div class="row">
<div class="col-lg-4">
<img
mdbLightboxItem
src="https://mdbootstrap.com/img/Photos/Thumbnails/Slides/1.webp"
[img]="'https://mdbootstrap.com/img/Photos/Slides/1.webp'"
alt="Lightbox image 1"
class="w-100"
/>
</div>
<div class="col-lg-4">
<img
mdbLightboxItem
#el="mdbLightboxItem"
src="https://mdbootstrap.com/img/Photos/Thumbnails/Slides/2.webp"
[img]="'https://mdbootstrap.com/img/Photos/Slides/2.webp'"
alt="Lightbox image 2"
class="w-100"
/>
</div>
<div class="col-lg-4">
<img
mdbLightboxItem
src="https://mdbootstrap.com/img/Photos/Thumbnails/Slides/3.webp"
[img]="'https://mdbootstrap.com/img/Photos/Slides/3.webp'"
alt="Lightbox image 3"
class="w-100"
/>
</div>
</div>
</mdb-lightbox>
<div class="text-center mt-3">
<button (click)="lightbox.open(el)" class="btn btn-primary" id="lightboxToggler">
Open second image
</button>
</div>
Lightbox - API
Import
import { MdbLightboxModule } from 'mdb-angular-ui-kit/lightbox';
…
@NgModule ({
...
imports: [MdbLightboxModule],
...
})
Inputs
Name | Type | Default | Description |
---|---|---|---|
zoomLevel
|
number | 1 |
Defines zoom level while zooming in or out. |
fontAwesome
|
string | 'free' |
Defines version of Font Awesome library. Available options are 'free' and 'pro'. |
img |
string |
|
Defines regular image to load when gallery is open. If not set, the value of
src attribute is taken.
|
caption
|
string |
|
Defines caption of the image. If not set, the value of
alt attribute is taken.
|
Outputs
Name | Type | Description |
---|---|---|
lightboxOpen
|
EventEmitter<void> | Emitted when a lightbox has been toggled. |
lightboxOpened
|
EventEmitter<void> | Emitted when a lightbox is opened. |
lightboxSlide
|
EventEmitter<void> | Emitted when a lightbox has been slided. |
lightboxSlided
|
EventEmitter<void> | Emitted after an image slide. |
lightboxZoomIn
|
EventEmitter<void> | Emitted when an image has been zoom in. |
lightboxZoomedIn
|
EventEmitter<void> | Emitted after an image is zoomed in. |
lightboxZoomOut
|
EventEmitter<void> | Emitted when an image has been zoom out. |
lightboxZoomedOut
|
EventEmitter<void> | Emitted after an image is zoomed out. |
lightboxClose
|
EventEmitter<void> | Emitted when a lightbox has been toggled. |
lightboxClosed
|
EventEmitter<void> | Emitted when a lightbox is closed. |
<mdb-lightbox (lightboxOpen)="onLightboxOpen()" class="lightbox">
<div class="row">
<div class="col-lg-4">
<img
mdbLightboxItem
src="https://mdbootstrap.com/img/Photos/Thumbnails/Slides/1.webp"
[img]="'https://mdbootstrap.com/img/Photos/Slides/1.webp'"
alt="Lightbox image 1"
class="w-100"
/>
</div>
</div>
</mdb-lightbox>
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss'],
})
export class AppComponent {
onLightboxOpen() {
console.log('Lightbox open');
}
}
Methods
Name | Description | Example |
---|---|---|
open(lightboxItem: MdbLightboxItemDirective) |
Opens the gallery and activates image set by the target key. Default is the first image. | lightbox.open(lightboxItem) |
slide(direction) |
Slides an image in the gallery. Available options: left ,
right , first , last . Dafault is right direction.
|
lightbox.slide('last') |
zoomIn |
Zooms in active image by one level. | lightbox.zoomIn() |
zoomOut
|
Zooms out active image by one level. | lightbox.zoomOut() |
toggleFullscreen
|
Toggles fullscreen. | lightbox.toggleFullscreen() |
reset |
Resets changed parameters such as position, zoom or fullscreen. | lightbox.reset() |
close |
Closes the gallery. | lightbox.close() |
<mdb-lightbox #lightbox class="lightbox">
<div class="row">
<div class="col-lg-4">
<img
#lightboxItem="mdbLightboxItem"
mdbLightboxItem
src="https://mdbootstrap.com/img/Photos/Thumbnails/Slides/1.webp"
[img]="'https://mdbootstrap.com/img/Photos/Slides/1.webp'"
alt="Lightbox image 1"
class="w-100"
/>
</div>
</div>
</mdb-lightbox>
import { AfterViewInit, Component, ViewChild } from '@angular/core';
import {
MdbLightboxComponent,
MdbLightboxItemDirective,
} from 'mdb-angular-ui-kit/lightbox';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss'],
})
export class AppComponent implements AfterViewInit {
@ViewChild('lightbox') lightbox!: MdbLightboxComponent;
@ViewChild('lightboxItem') lightboxItem!: MdbLightboxItemDirective;
ngAfterViewInit(): void {
setTimeout(() => {
this.lightbox.open(this.lightboxItem);
}, 0);
}
}
CSS variables
As part of MDB’s evolving CSS variables approach, lightbox now uses local CSS variables on
mdb-lightbox-modal
for enhanced real-time customization. Values for the CSS variables are
set via Sass, so Sass customization is still supported, too.
// mdb-lightbox-modal
--#{$prefix}lightbox-zindex: #{$lightbox-zindex};
--#{$prefix}lightbox-toolbar-zindex: #{$lightbox-toolbar-zindex};
--#{$prefix}lightbox-gallery-background-color: #{$lightbox-gallery-background-color};
--#{$prefix}lightbox-gallery-transition: #{$lightbox-gallery-transition};
--#{$prefix}lightbox-gallery-toolbar-height: #{$lightbox-gallery-toolbar-height};
--#{$prefix}lightbox-gallery-toolbar-transition: #{$lightbox-gallery-toolbar-transition};
--#{$prefix}lightbox-gallery-toolbar-button-width: #{$lightbox-gallery-toolbar-button-width};
--#{$prefix}lightbox-gallery-toolbar-button-height: #{$lightbox-gallery-toolbar-button-height};
--#{$prefix}lightbox-gallery-toolbar-button-color: #{$lightbox-gallery-toolbar-button-color};
--#{$prefix}lightbox-gallery-toolbar-button-transition: #{$lightbox-gallery-toolbar-button-transition};
--#{$prefix}lightbox-gallery-toolbar-button-hover-color: #{$lightbox-gallery-toolbar-button-hover-color};
--#{$prefix}lightbox-gallery-toolbar-button-before-font-weight: #{$lightbox-gallery-toolbar-button-before-font-weight};
--#{$prefix}lightbox-gallery-content-top: #{$lightbox-gallery-content-top};
--#{$prefix}lightbox-gallery-content-left: #{$lightbox-gallery-content-left};
--#{$prefix}lightbox-gallery-content-width: #{$lightbox-gallery-content-width};
--#{$prefix}lightbox-gallery-content-height: #{$lightbox-gallery-content-height};
--#{$prefix}lightbox-gallery-arrow-width: #{$lightbox-gallery-arrow-width};
--#{$prefix}lightbox-gallery-arrow-transition: #{$lightbox-gallery-arrow-transition};
--#{$prefix}lightbox-gallery-arrow-button-width: #{$lightbox-gallery-arrow-button-width};
--#{$prefix}lightbox-gallery-arrow-button-height: #{$lightbox-gallery-arrow-button-height};
--#{$prefix}lightbox-gallery-arrow-button-color: #{$lightbox-gallery-arrow-button-color};
--#{$prefix}lightbox-gallery-arrow-button-transition: #{$lightbox-gallery-arrow-button-transition};
--#{$prefix}lightbox-gallery-arrow-button-hover-color: #{$lightbox-gallery-arrow-button-hover-color};
--#{$prefix}lightbox-gallery-arrow-button-before-font-weight: #{$lightbox-gallery-arrow-button-before-font-weight};
--#{$prefix}lightbox-gallery-button-focus-color: #{$lightbox-gallery-button-focus-color};
--#{$prefix}lightbox-gallery-image-transform: #{$lightbox-gallery-image-transform};
--#{$prefix}lightbox-gallery-image-transition: #{$lightbox-gallery-image-transition};
--#{$prefix}lightbox-gallery-counter-color: #{$lightbox-gallery-counter-color};
--#{$prefix}lightbox-gallery-counter-padding-x: #{$lightbox-gallery-counter-padding-x};
--#{$prefix}lightbox-gallery-caption-color: #{$lightbox-gallery-caption-color};
--#{$prefix}lightbox-gallery-caption-margin-x: #{$lightbox-gallery-caption-margin-x};
--#{$prefix}lightbox-gallery-caption-wrapper-height: #{$lightbox-gallery-caption-wrapper-height};
--#{$prefix}lightbox-gallery-loader-transition: #{$lightbox-gallery-loader-transition};
// .disabled-scroll
--#{$prefix}lightbox-disabled-scroll-media-padding-right: #{$lightbox-disabled-scroll-media-padding-right};
SCSS variables
$lightbox-zindex: 1100;
$lightbox-zindex-toolbar: 1110;
$lightbox-gallery-background-color: rgba(0, 0, 0, 0.9);
$lightbox-gallery-transition: all 0.3s ease-out;
$lightbox-gallery-toolbar-height: 50px;
$lightbox-gallery-toolbar-transition: opacity 0.4s;
$lightbox-gallery-counter-color: #b3b3b3;
$lightbox-gallery-counter-padding-x: 10px;
$lightbox-gallery-toolbar-button-width: 50px;
$lightbox-gallery-toolbar-button-height: 50px;
$lightbox-gallery-toolbar-button-color: #b3b3b3;
$lightbox-gallery-toolbar-button-transition: color 0.2s;
$lightbox-gallery-toolbar-button-hover-color: $white;
$lightbox-gallery-toolbar-button-before-font-weight: 900;
$lightbox-gallery-content-top: 50px;
$lightbox-gallery-content-left: $lightbox-gallery-content-top;
$lightbox-gallery-content-width: calc(100% - 100px);
$lightbox-gallery-content-height: $lightbox-gallery-content-width;
$lightbox-gallery-image-transform: scale(0.25);
$lightbox-gallery-image-transition: all 0.4s ease-out;
$lightbox-gallery-arrow-width: 50px;
$lightbox-gallery-arrow-transition: opacity 0.4s;
$lightbox-gallery-arrow-button-width: 50px;
$lightbox-gallery-arrow-button-height: 50px;
$lightbox-gallery-arrow-button-color: #b3b3b3;
$lightbox-gallery-arrow-button-transition: color 0.2s;
$lightbox-gallery-arrow-button-hover-color: $white;
$lightbox-gallery-arrow-button-before-font-weight: 900;
$lightbox-gallery-caption-wrapper-height: 50px;
$lightbox-gallery-caption-color: $white;
$lightbox-gallery-caption-margin-x: 10px;
$lightbox-gallery-loader-transition: opacity 1s;
$lightbox-gallery-button-focus-color: $white;
$lightbox-disabled-scroll-media-padding-right: 17px;