Options
Fancybox has many options that allow for easy customization. Several options accept a method and use a return value. This allows, for example, to set options like wheel
depending on whether the user is using a touchpad mouse device.
Declarative Usage
Use the Fancybox.bind()
method to launch Fancybox with custom options when the user clicks on the matching element.
Fancybox.bind("[data-fancybox]", {
hideScrollbar: false,
});
If you're having trouble setting the options, make sure the selector actually returns your elements, e.g. check the return value of document.querySelectorAll(your_selector)
:
document.querySelectorAll("[data-fancybox]");
Programmatic Usage
You can pass a set of options as a second parameter into a Fancybox constructor.
new Fancybox(
// Array containing gallery items
[
// Gallery item
{
src: "image-a.jpeg",
thumb: "thumbnail-a.jpeg",
},
],
// Gallery options
{
hideScrollbar: false,
}
);
Global Options
You might want to set options that are common to all instances. Use Fancybox.defaults
static property to change default options:
Fancybox.defaults.showClass = "f-scaleIn";
If you want to change several values at the same time:
Fancybox.defaults = {
...Fancybox.defaults,
showClass: "f-scaleIn",
hideClass: "f-scaleOut",
};
Component Hierarchy
Fancybox is built around the Carousel component, you can customise it using Carousel
option. This example disables infinite navigation:
Fancybox.bind("[data-fancybox]", {
Carousel: {
infinite: false,
},
});
This example shows how to change the animations:
Fancybox.bind("[data-fancybox]", {
// Transition effect when changing gallery items
Carousel: {
transition: "slide",
},
// Disable image zoom animation on opening and closing
Images: {
zoom: false,
},
// Custom CSS transition on opening
showClass: "f-fadeIn",
});
Since Carousel component is built around the Panzoom component, you can use Panzoom
option to, for example, speed up the swipe animation:
Fancybox.bind("[data-fancybox]", {
Carousel: {
Panzoom: {
decelFriction: 0.5,
},
},
});
Available Options
TIP
See the corresponding plugin page for additional customization options. For example, Images plugin for images, HTML plugin for HTML content, iframes, videos, etc.
animated
Should backdrop and UI elements fade in/out on start/close
Type
boolean
Default
true
autoFocus
Set focus on first focusable element after displaying content
Type
boolean
Default
true
backdropClick
The action to perform when the user clicks on the backdrop
Type
ClickAction | ((any?: any) => ClickAction | void)
Default
"close"
Note
type ClickAction =
| "toggleZoom"
| "toggleCover"
| "toggleMax"
| "zoomToFit"
| "zoomToMax"
| "iterateZoom"
| false
| "close"
| "next"
| "prev";
caption
Change caption per slide
Type
| string
| HTMLElement
| false
| ((
instance: Fancybox,
slide: slideType,
caption?: string | HTMLElement
) => string | HTMLElement | false)
Default
``
Carousel
Optional object to extend options for main Carousel
Type
Partial<CarouselOptionsType>
Default
{}
closeButton
If true, a close button will be created above the content
Type
"auto" | boolean
Default
"auto"
closeExisting
If true, previously opened instance will be closed
Type
boolean
Default
false
commonCaption
If true, only one caption element will be used for all slides
Type
boolean
Default
false
compact
If compact mode needs to be activated
Type
boolean | ((instance: Fancybox) => boolean)
Default
() =>
window.matchMedia("(max-width: 578px)
contentClick
The action to perform when the user clicks on the content
Type
ClickAction | ((any?: any) => ClickAction | void)
Default
"toggleZoom"
Note
type ClickAction =
| "toggleZoom"
| "toggleCover"
| "toggleMax"
| "zoomToFit"
| "zoomToMax"
| "iterateZoom"
| false
| "close"
| "next"
| "prev";
contentDblClick
The action to take when the user double-clicks on the content
Type
ClickAction | ((any?: any) => ClickAction | void)
Default
false
Note
type ClickAction =
| "toggleZoom"
| "toggleCover"
| "toggleMax"
| "zoomToFit"
| "zoomToMax"
| "iterateZoom"
| false
| "close"
| "next"
| "prev";
defaultDisplay
The default value of the CSS display
property for hidden inline elements
Type
"flex" | "block" | string;
Default
"flex"
defaultType
Default content type
Type
"image" | "iframe" | "youtube" | "vimeo" | "inline" | "html" | "ajax";
Default
"image"
dragToClose
Enable drag-to-close gesture - drag content up/down to close instance
Type
boolean
Default
true
Fullscreen
If Fancybox should start in full-screen mode
Type
{
autoStart: boolean;
}
Default
{
autoStart: false;
}
groupAll
If true, all matching elements will be grouped together in one group
Type
boolean
Default
false
groupAttr
The name of the attribute used for grouping
Type
string
Default
"data-fancybox"
height
Change content height per slide
Type
| "auto"
| number
| ((instance: Fancybox, slide: slideType) => "auto" | number)
Default
``
hideClass
Class name to be applied to the content to hide it.
Note: If you disable image zoom, this class name will be used to run the image hide animation.
Type
string | false
Default
"f-fadeOut"
hideScrollbar
If browser scrollbar should be hidden
Type
boolean
Default
true
id
Custom id
for the instance
Type
number | string
Default
``
idle
Timeout in milliseconds after which to activate idle mode
Type
number | false
Default
3500
keyboard
Keyboard events
Type
keyboardType
Default
{
Escape: "close",
Delete: "close",
Backspace: "close",
PageUp: "next",
PageDown: "prev",
ArrowUp: "prev",
ArrowDown: "next",
ArrowRight: "next",
ArrowLeft: "prev",
}
l10n
Localization of strings
Type
Record<string, string>
Default
en
mainClass
Custom class name for the container
Type
string
Default
``
on
Optional event listeners
Type
Partial<Events>
Default
{}
parentEl
Element where container is appended
Note. If no element is specified, container is appended to the document.body
Type
HTMLElement | null
Default
null
placeFocusBack
Set focus back to trigger element after closing Fancybox
Type
boolean
Default
true
showClass
Class name to be applied to the content to reveal it.
Note: If you disable image zoom, this class name will be used to run the image reveal animation.
Type
string | false
Default
"f-zoomInUp"
src
Change source per slide
Type
| string
| HTMLElement
| ((instance: Fancybox, slide: slideType) => string | HTMLElement)
Default
``
startIndex
Index of active slide on the start
Type
number
Default
0
tpl
HTML templates for various elements
Type
{
// Close button icon
closeButton?: string;
// Main structure of Fancybox
main?: string;
}
Default
{
closeButton:
'<button data-fancybox-close class="f-button is-close-btn" title="{{CLOSE}}"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" tabindex="-1"><path d="M20 20L4 4m16 0L4 20"/></svg></button>',
main: `<div class="fancybox__container" role="dialog" aria-modal="true" aria-label="{{MODAL}}" tabindex="-1">
<div class="fancybox__backdrop"></div>
<div class="fancybox__carousel"></div>
<div class="fancybox__footer"></div>
</div>`,
}
trapFocus
Trap focus inside Fancybox
Type
boolean
Default
true
wheel
Mouse wheel event listener
Type
| "zoom"
| "pan"
| "close"
| "slide"
| false
| ((
instance: Fancybox,
event: MouseEvent
) => "zoom" | "pan" | "close" | "slide" | false)
Default
"zoom"
width
Change content width per slide
Type
| "auto"
| number
| ((instance: Fancybox, slide: slideType) => "auto" | number)
Default
``