Skip to content

phucbm/flickity-responsive

Folders and files

NameName
Last commit message
Last commit date

Latest commit

125b5b9 ยท Mar 27, 2025
Mar 27, 2025
Jan 9, 2025
Mar 20, 2025
Mar 27, 2025
Nov 20, 2022
Mar 27, 2025
Nov 8, 2022
Nov 8, 2022
Mar 13, 2025
Mar 13, 2025
Nov 8, 2022
Nov 8, 2022
Mar 27, 2025
Mar 27, 2025
Nov 8, 2022
Mar 13, 2025
Mar 27, 2025
Mar 20, 2025

Repository files navigation

Flickity Responsive

release minified jsdelivr npm weekly download license Netlify Status

A vanilla JS plugin that adds responsive option for Flickity. And more extendable settings, see #docs

Introduction

At the time of this plugin was made, Flickity does not officially offer any way to update the options on various screen-sizes.

Read more about the issue here ๐Ÿ‘‰ metafizzy/flickity#233

So, I create a plugin that brings responsive to Flickity, just like the way Slick works.

Getting started

Add the script to your project in this order ๐Ÿ‘‡

  • jQuery (optional)
  • Flickity
  • flickity-responsive

NPM Package

Install NPM package

npm i flickity-responsive

Import

import {FlickityResponsive} from "flickity-responsive";

Download

๐Ÿ‘‰ Self hosted - Download the latest release

<script src="./flickity-responsive.min.js"></script>

๐Ÿ‘‰ CDN Hosted - jsDelivr

<script src="https://cdn.jsdelivr.net/gh/phucbm/[email protected]/flickity-responsive.min.js"></script>

Usage

Just change the name, all other options stay the same.

// init with vanilla JS
const carousel = new FlickityResponsive('.carousel', {
    pageDots: false,
    responsive: [
        {
            breakpoint: 768,
            settings: {
                prevNextButtons: false,
                pageDots: true,
            }
        }
    ]
});

Init with HTML

Use data attribute to init Flickity Responsive, just exactly like Flickity.

<div data-flickity-responsive='{ "cellAlign": "left", "contain": true }'>
    <div class="carousel-cell"></div>
    <div class="carousel-cell"></div>
    <div class="carousel-cell"></div>
</div>

โš ๏ธ Options set in HTML must be valid JSON.

Docs

Visit https://flickity.netlify.app for examples.

const carousel = new FlickityResponsive('.carousel', {
    contain: true, // default in Flickity Responsive

    // Extra features ๐Ÿ‘‡

    // destroy
    destroy: false,

    // custom arrows
    prevArrow: undefined, // DOM element, jQuery element
    nextArrow: undefined, // DOM element, jQuery element

    // indicator numbers
    indicatorCurrent: undefined, // current slides, DOM element, jQuery element
    indicatorTotal: undefined, // total slides, DOM element, jQuery element

    // hide navigation elements if the slider is not slide-able
    responsiveNavigation: true,

    // indicator
    indicatorZeroPad: false,
    indicatorCurrent: undefined,
    indicatorTotal: undefined,

    // force move
    forceMove: true, // make sure that every time an arrows clicked, the carousel will move

    // aria hidden focus
    ariaHiddenFocus: true, // Add tabindex="-1" to all elements with or inside aria-hidden="true"
    ariaHiddenFocusSelector: `[aria-hidden="true"] a, [aria-hidden="true"] button`,
});

FYI

This plugin respects Flickity's API and use matchMedia() to know when to destroy and re-initialize the carousel.

โš ๏ธ Important note: the breakpoint property is using CSS max-width logic. For instance, when you set breakpoint:480, that means responsive settings will be applied when the viewport is <=480px (while Slick is <480px). Let's be cleared ๐Ÿ’Ž

Deployment

Before release, update version in package.json and README.md.

# Run dev server
npm run dev

# Generate prod files
npm run prod

# Publish package
npm publish

# build
npm run build

License

MIT License

Copyright (c) 2021-2025 Phuc Bui

Please leave a star โญ๏ธ to support my work. Thank you!