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
``