Lightbox
React Bootstrap 5 Lightbox component
Responsive lightbox built with the latest Bootstrap 5. 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.
import React from 'react';
import { MDBLightbox, MDBLightboxItem, MDBRow, MDBCol } from 'mdb-react-ui-kit';
export default function App() {
return (
<MDBLightbox>
<MDBRow>
<MDBCol lg='4'>
<MDBLightboxItem
src='https://mdbootstrap.com/img/Photos/Thumbnails/Slides/1.webp'
fullscreenSrc='https://mdbootstrap.com/img/Photos/Slides/1.webp'
className='w-100'
/>
</MDBCol>
<MDBCol lg='4'>
<MDBLightboxItem
src='https://mdbootstrap.com/img/Photos/Thumbnails/Slides/2.webp'
fullscreenSrc='https://mdbootstrap.com/img/Photos/Slides/2.webp'
className='w-100'
/>
</MDBCol>
<MDBCol lg='4'>
<MDBLightboxItem
src='https://mdbootstrap.com/img/Photos/Thumbnails/Slides/3.webp'
fullscreenSrc='https://mdbootstrap.com/img/Photos/Slides/3.webp'
className='w-100'
/>
</MDBCol>
</MDBRow>
</MDBLightbox>
);
}
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
fullscreenSrc
property add the path to the image with higher resolution. If the
fullscreenSrc
property is omitted, the lightbox will display the same image as in
the reduced size.
import React from 'react';
import { MDBLightboxItem } from 'mdb-react-ui-kit';
export default function App() {
return (
<MDBLightboxItem
src='https://mdbootstrap.com/img/Photos/Thumbnails/Slides/1.webp'
fullscreenSrc='https://mdbootstrap.com/img/Photos/Slides/1.webp'
className='w-100'
/>
);
}
Shadows and rounded corners
You can improve the look of the images by adding shadows and rounded corners.
import React from 'react';
import { MDBLightbox, MDBLightboxItem, MDBRow, MDBCol } from 'mdb-react-ui-kit';
export default function App() {
return (
<MDBLightbox>
<MDBRow>
<MDBCol lg='4'>
<MDBLightboxItem
src='https://mdbootstrap.com/img/Photos/Thumbnails/Slides/1.webp'
fullscreenSrc='https://mdbootstrap.com/img/Photos/Slides/1.webp'
className='w-100 shadow-1-strong rounded'
/>
</MDBCol>
<MDBCol lg='4'>
<MDBLightboxItem
src='https://mdbootstrap.com/img/Photos/Thumbnails/Slides/2.webp'
fullscreenSrc='https://mdbootstrap.com/img/Photos/Slides/2.webp'
className='w-100 shadow-1-strong rounded'
/>
</MDBCol>
<MDBCol lg='4'>
<MDBLightboxItem
src='https://mdbootstrap.com/img/Photos/Thumbnails/Slides/3.webp'
fullscreenSrc='https://mdbootstrap.com/img/Photos/Slides/3.webp'
className='w-100 shadow-1-strong rounded'
/>
</MDBCol>
</MDBRow>
</MDBLightbox>
);
}
Different sizes
Loaded images can have any aspect ratio. Their size will be automatically adjusted to the window when you open the lightbox.
import React from 'react';
import { MDBLightbox, MDBLightboxItem, MDBRow, MDBCol } from 'mdb-react-ui-kit';
export default function App() {
return (
<MDBLightbox>
<MDBRow>
<MDBCol lg='6'>
<MDBLightboxItem
src='https://mdbootstrap.com/img/Photos/Thumbnails/Slides/1.webp'
fullscreenSrc='https://mdbootstrap.com/img/Photos/Slides/1.webp'
className='w-100 mb-2 mb-md-4'
/>
<MDBLightboxItem
src='https://mdbootstrap.com/img/Photos/Thumbnails/Square/1.webp'
fullscreenSrc='https://mdbootstrap.com/img/Photos/Square/1.webp'
className='w-100'
/>
</MDBCol>
<MDBCol lg='6'>
<MDBLightboxItem
src='https://mdbootstrap.com/img/Photos/Thumbnails/Vertical/1.webp'
fullscreenSrc='https://mdbootstrap.com/img/Photos/Vertical/1.webp'
className='w-100'
/>
</MDBCol>
</MDBRow>
</MDBLightbox>
);
}
Zoom level
The zoomLevel
property allows you to define the size of a single zoom
in / zoom out.
import React from 'react';
import { MDBLightbox, MDBLightboxItem, MDBRow, MDBCol } from 'mdb-react-ui-kit';
export default function App() {
return (
<MDBLightbox zoomLevel={0.25}>
<MDBRow>
<MDBCol lg='4'>
<MDBLightboxItem
src='https://mdbootstrap.com/img/Photos/Thumbnails/Slides/1.webp'
fullscreenSrc='https://mdbootstrap.com/img/Photos/Slides/1.webp'
className='w-100'
/>
</MDBCol>
<MDBCol lg='4'>
<MDBLightboxItem
src='https://mdbootstrap.com/img/Photos/Thumbnails/Slides/2.webp'
fullscreenSrc='https://mdbootstrap.com/img/Photos/Slides/2.webp'
className='w-100'
/>
</MDBCol>
<MDBCol lg='4'>
<MDBLightboxItem
src='https://mdbootstrap.com/img/Photos/Thumbnails/Slides/3.webp'
fullscreenSrc='https://mdbootstrap.com/img/Photos/Slides/3.webp'
className='w-100'
/>
</MDBCol>
</MDBRow>
</MDBLightbox>
);
}
Disabled image
By adding a disabled
property to any MDBLightboxItem
, you can exclude it from your
lightbox. In the example below, the third image has been disabled.
import React from 'react';
import { MDBLightbox, MDBLightboxItem, MDBRow, MDBCol } from 'mdb-react-ui-kit';
export default function App() {
return (
<MDBLightbox>
<MDBRow>
<MDBCol lg='3'>
<MDBLightboxItem
src='https://mdbootstrap.com/img/Photos/Thumbnails/Slides/1.webp'
fullscreenSrc='https://mdbootstrap.com/img/Photos/Slides/1.webp'
className='w-100'
/>
</MDBCol>
<MDBCol lg='3'>
<MDBLightboxItem
src='https://mdbootstrap.com/img/Photos/Thumbnails/Slides/2.webp'
fullscreenSrc='https://mdbootstrap.com/img/Photos/Slides/2.webp'
className='w-100'
/>
</MDBCol>
<MDBCol lg='3'>
<MDBLightboxItem
disabled
src='https://mdbootstrap.com/img/Photos/Thumbnails/Slides/3.webp'
fullscreenSrc='https://mdbootstrap.com/img/Photos/Slides/3.webp'
className='w-100'
/>
</MDBCol>
<MDBCol lg='3'>
<MDBLightboxItem
src='https://mdbootstrap.com/img/Photos/Thumbnails/Slides/4.webp'
fullscreenSrc='https://mdbootstrap.com/img/Photos/Slides/4.webp'
className='w-100'
/>
</MDBCol>
</MDBRow>
</MDBLightbox>
);
}
Outside access
import React, { useRef } from 'react';
import { MDBLightbox, MDBLightboxItem, MDBRow, MDBCol, MDBBtn } from 'mdb-react-ui-kit';
export default function App() {
const outsideClickRef = useRef(null);
const handleOutsideClick = () => {
outsideClickRef.current?.click();
};
return (
<>
<MDBLightbox>
<MDBRow>
<MDBCol lg='4'>
<MDBLightboxItem
src='https://mdbootstrap.com/img/Photos/Thumbnails/Slides/1.webp'
fullscreenSrc='https://mdbootstrap.com/img/Photos/Slides/1.webp'
className='w-100'
alt='Lightbox image 1'
/>
</MDBCol>
<MDBCol lg='4'>
<MDBLightboxItem
src='https://mdbootstrap.com/img/Photos/Thumbnails/Slides/2.webp'
fullscreenSrc='https://mdbootstrap.com/img/Photos/Slides/2.webp'
className='w-100'
alt='Lightbox image 2'
ref={outsideClickRef}
/>
</MDBCol>
<MDBCol lg='4'>
<MDBLightboxItem
src='https://mdbootstrap.com/img/Photos/Thumbnails/Slides/3.webp'
fullscreenSrc='https://mdbootstrap.com/img/Photos/Slides/3.webp'
className='w-100'
alt='Lightbox image 3'
/>
</MDBCol>
</MDBRow>
</MDBLightbox>
<div className='text-center mt-3'>
<MDBBtn onClick={handleOutsideClick}>Open second image</MDBBtn>
</div>
</>
);
}
Lightbox - API
Import
import { MDBLightbox, MDBLightboxItem } from 'mdb-react-ui-kit';
Properties
MDBLightbox
Name | Type | Default | Description | Example |
---|---|---|---|---|
className
|
number | 1 |
Defines zoom level while zooming in or out. |
<MDBLightbox className="class" />
|
lightboxRef
|
Reference | '' |
A reference to the MDBLightbox |
<MDBLightbox lightboxRef={customRef} />
|
tag
|
String | 'span' |
Defines tag of the MDBLightbox element |
<MDBLightbox tag="section" />
|
zoomLevel
|
number | 1 |
Defines zoom level while zooming in or out. |
<MDBLightbox zoomLevel={0.5} />
|
disablePortal
|
Boolean | false |
When true, component will be rendered in standard DOM hierarchy. |
<MDBLightbox disablePortal />
|
MDBLightboxItem
Name | Type | Default | Description | Example |
---|---|---|---|---|
disabled
|
Boolean | '' |
Creates a disabled image in the lightbox |
<MDBLightboxItem disabled />
|
disabled
|
Boolean | '' |
Creates a disabled image in the lightbox |
<MDBLightboxItem disabled />
|
fullscreenSrc
|
String | '' |
Defines a fullscreen source for the item |
<MDBLightboxItem fullscreenSrc="..." />
|
src
|
String | '' |
Defines a thumbnail source for the item |
<MDBLightboxItem src="..." />
|
Events
Name | Type | Description |
---|---|---|
onClose
|
() => void | Fires after closing a lightbox. |
onOpen
|
() => void | Fires after opening a lightbox. |
onSlide
|
() => void | Fires after sliding an item. |
onZoomIn
|
() => void | Fires after zooming in an image. |
onZoomOut
|
() => void | Fires after zooming out an image. |
CSS variables
As part of MDB’s evolving CSS variables approach, lightbox now uses local CSS variables on
.lightbox-gallery
for enhanced real-time customization. Values for the CSS variables are
set via Sass, so Sass customization is still supported, too.
// .lightbox-gallery
--#{$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;