Multi item carousel

Bootstrap 5 Multi item carousel plugin

An advanced slideshow component for cycling through images with a selectable number of active items.

Responsive Multi item carousel built with the latest Bootstrap 5. Many practical examples like lightbox integration, Vertical, autoplay, and many more.

Note: Read the API tab to find all available options and advanced customization

Note: Currently, the plugin is only compatible with the basic MDB package imported in UMD format. More about import MDB formats.


Basic example

A basic example of a multi carousel with the most common use case with 3 active items (default version).

<div class="multi-carousel" data-mdb-multi-carousel-init>
  <div class="multi-carousel-inner">
    <div class="multi-carousel-item">
      <img
        src="https://mdbcdn.b-cdn.net/img/Photos/Thumbnails/Slides/1.webp"
        alt="Table Full of Spices"
        class="w-100"
      />
    </div>
    <div class="multi-carousel-item">
      <img
        src="https://mdbcdn.b-cdn.net/img/Photos/Thumbnails/Slides/2.webp"
        alt="Winter Landscape"
        class="w-100"
      />
    </div>
    <div class="multi-carousel-item">
      <img
        src="https://mdbcdn.b-cdn.net/img/Photos/Thumbnails/Slides/3.webp"
        alt="View of the City in the Mountains"
        class="w-100"
      />
    </div>
    <div class="multi-carousel-item">
      <img
        src="https://mdbcdn.b-cdn.net/img/Photos/Thumbnails/Slides/4.webp"
        alt="Place Royale Bruxelles"
        class="w-100"
      />
    </div>
  </div>
  <button
    class="carousel-control-prev"
    type="button"
    tabindex="0"
    data-mdb-slide="prev"
  >
    <span class="carousel-control-prev-icon" aria-hidden="true"></span>
  </button>
  <button
    class="carousel-control-next"
    type="button"
    tabindex="0"
    data-mdb-slide="next"
  >
    <span class="carousel-control-next-icon" aria-hidden="true"></span>
  </button>
</div>

Vertical example

To enable vertical mode just add vertical class to the wrapper element.

<div class="multi-carousel vertical" data-mdb-multi-carousel-init style="max-width: 20rem;">
  <div class="multi-carousel-inner">
    <div class="multi-carousel-item">
      <img
        src="https://mdbcdn.b-cdn.net/img/Photos/Thumbnails/Slides/1.webp"
        alt="Table Full of Spices"
        class="w-100"
      />
    </div>
    <div class="multi-carousel-item">
      <img
        src="https://mdbcdn.b-cdn.net/img/Photos/Thumbnails/Slides/2.webp"
        alt="Winter Landscape"
        class="w-100"
      />
    </div>
    <div class="multi-carousel-item">
      <img
        src="https://mdbcdn.b-cdn.net/img/Photos/Thumbnails/Slides/3.webp"
        alt="View of the City in the Mountains"
        class="w-100"
      />
    </div>
    <div class="multi-carousel-item">
      <img
        src="https://mdbcdn.b-cdn.net/img/Photos/Thumbnails/Slides/4.webp"
        alt="Place Royale Bruxelles"
        class="w-100"
      />
    </div>
  </div>
  <button
    class="carousel-control-prev"
    type="button"
    tabindex="0"
    data-mdb-slide="prev"
  >
    <span class="carousel-control-prev-icon" aria-hidden="true"></span>
  </button>
  <button
    class="carousel-control-next"
    type="button"
    tabindex="0"
    data-mdb-slide="next"
  >
    <span class="carousel-control-next-icon" aria-hidden="true"></span>
  </button>
</div>

Lightbox integration

Wrap carousel with a div.lightbox element to enable lightbox.

To ensure the proper performance of the page, it is recommended to include thumbnails of images in the src attribute. Then in the data-mdb-img attribute add the path to the image with higher resolution. If the data-mdb-img attribute is omitted, the lightbox will display the same image as in the reduced size.

<div class="lightbox" data-mdb-lightbox-init>
  <div class="multi-carousel" data-mdb-multi-carousel-init>
    <div class="multi-carousel-inner">
      <div class="multi-carousel-item">
        <img
          src="https://mdbcdn.b-cdn.net/img/Photos/Thumbnails/Slides/1.webp"
          data-mdb-img="https://mdbcdn.b-cdn.net/img/Photos/Slides/1.webp"
          alt="Table Full of Spices"
          class="w-100"
        />
      </div>
      <div class="multi-carousel-item">
        <img
          src="https://mdbcdn.b-cdn.net/img/Photos/Thumbnails/Slides/2.webp"
          data-mdb-img="https://mdbcdn.b-cdn.net/img/Photos/Slides/2.webp"
          alt="Winter Landscape"
          class="w-100"
        />
      </div>
      <div class="multi-carousel-item">
        <img
          src="https://mdbcdn.b-cdn.net/img/Photos/Thumbnails/Slides/3.webp"
          data-mdb-img="https://mdbcdn.b-cdn.net/img/Photos/Slides/3.webp"
          alt="View of the City in the Mountains"
          class="w-100"
        />
      </div>
      <div class="multi-carousel-item">
        <img
          src="https://mdbcdn.b-cdn.net/img/Photos/Thumbnails/Slides/4.webp"
          data-mdb-img="https://mdbcdn.b-cdn.net/img/Photos/Slides/4.webp"
          alt="Place Royale Bruxelles"
          class="w-100"
        />
      </div>
    </div>
    <button
      class="carousel-control-prev"
      type="button"
      tabindex="0"
      data-mdb-slide="prev"
    >
      <span class="carousel-control-prev-icon" aria-hidden="true"></span>
    </button>
    <button
      class="carousel-control-next"
      type="button"
      tabindex="0"
      data-mdb-slide="next"
    >
      <span class="carousel-control-next-icon" aria-hidden="true"></span>
    </button>
  </div>
</div>

Active items

Set a data-mdb-items attribute to change the number of active images.

<div class="multi-carousel" data-mdb-multi-carousel-init data-mdb-items="2">
  <div class="multi-carousel-inner">
    <div class="multi-carousel-item">
      <img
        src="https://mdbcdn.b-cdn.net/img/Photos/Thumbnails/Slides/1.webp"
        data-mdb-img="https://mdbcdn.b-cdn.net/img/Photos/Slides/1.webp"
        alt="Table Full of Spices"
        class="w-100"
      />
    </div>
    <div class="multi-carousel-item">
      <img
        src="https://mdbcdn.b-cdn.net/img/Photos/Thumbnails/Slides/2.webp"
        data-mdb-img="https://mdbcdn.b-cdn.net/img/Photos/Slides/2.webp"
        alt="Winter Landscape"
        class="w-100"
      />
    </div>
    <div class="multi-carousel-item">
      <img
        src="https://mdbcdn.b-cdn.net/img/Photos/Thumbnails/Slides/3.webp"
        data-mdb-img="https://mdbcdn.b-cdn.net/img/Photos/Slides/3.webp"
        alt="View of the City in the Mountains"
        class="w-100"
      />
    </div>
    <div class="multi-carousel-item">
      <img
        src="https://mdbcdn.b-cdn.net/img/Photos/Thumbnails/Slides/4.webp"
        data-mdb-img="https://mdbcdn.b-cdn.net/img/Photos/Slides/4.webp"
        alt="Place Royale Bruxelles"
        class="w-100"
      />
    </div>
  </div>
  <button
    class="carousel-control-prev"
    type="button"
    tabindex="0"
    data-mdb-slide="prev"
  >
    <span class="carousel-control-prev-icon" aria-hidden="true"></span>
  </button>
  <button
    class="carousel-control-next"
    type="button"
    tabindex="0"
    data-mdb-slide="next"
  >
    <span class="carousel-control-next-icon" aria-hidden="true"></span>
  </button>
</div>

Breakpoint

To change breakpoint on small devices easily set data-mdb-breakpoint value (default value is 992). Set to false to disable responsiveness.

<div class="multi-carousel" data-mdb-multi-carousel-init data-mdb-breakpoint="1200">
  <div class="multi-carousel-inner">
    <div class="multi-carousel-item">
      <img
        src="https://mdbcdn.b-cdn.net/img/Photos/Thumbnails/Slides/1.webp"
        alt="Table Full of Spices"
        class="w-100"
      />
    </div>
    <div class="multi-carousel-item">
      <img
        src="https://mdbcdn.b-cdn.net/img/Photos/Thumbnails/Slides/2.webp"
        alt="Winter Landscape"
        class="w-100"
      />
    </div>
    <div class="multi-carousel-item">
      <img
        src="https://mdbcdn.b-cdn.net/img/Photos/Thumbnails/Slides/3.webp"
        alt="View of the City in the Mountains"
        class="w-100"
      />
    </div>
    <div class="multi-carousel-item">
      <img
        src="https://mdbcdn.b-cdn.net/img/Photos/Thumbnails/Slides/4.webp"
        alt="Place Royale Bruxelles"
        class="w-100"
      />
    </div>
  </div>
  <button
    class="carousel-control-prev"
    type="button"
    tabindex="0"
    data-mdb-slide="prev"
  >
    <span class="carousel-control-prev-icon" aria-hidden="true"></span>
  </button>
  <button
    class="carousel-control-next"
    type="button"
    tabindex="0"
    data-mdb-slide="next"
  >
    <span class="carousel-control-next-icon" aria-hidden="true"></span>
  </button>
</div>

Autoplay

Set a data-mdb-interval attribute to enable autoplay.

<div class="multi-carousel" data-mdb-multi-carousel-init data-mdb-interval="2000">
  <div class="multi-carousel-inner">
    <div class="multi-carousel-item">
      <img
        src="https://mdbcdn.b-cdn.net/img/Photos/Thumbnails/Slides/1.webp"
        alt="Table Full of Spices"
        class="w-100"
      />
    </div>
    <div class="multi-carousel-item">
      <img
        src="https://mdbcdn.b-cdn.net/img/Photos/Thumbnails/Slides/2.webp"
        alt="Winter Landscape"
        class="w-100"
      />
    </div>
    <div class="multi-carousel-item">
      <img
        src="https://mdbcdn.b-cdn.net/img/Photos/Thumbnails/Slides/3.webp"
        alt="View of the City in the Mountains"
        class="w-100"
      />
    </div>
    <div class="multi-carousel-item">
      <img
        src="https://mdbcdn.b-cdn.net/img/Photos/Thumbnails/Slides/4.webp"
        alt="Place Royale Bruxelles"
        class="w-100"
      />
    </div>
  </div>
  <button
    class="carousel-control-prev"
    type="button"
    tabindex="0"
    data-mdb-slide="prev"
  >
    <span class="carousel-control-prev-icon" aria-hidden="true"></span>
  </button>
  <button
    class="carousel-control-next"
    type="button"
    tabindex="0"
    data-mdb-slide="next"
  >
    <span class="carousel-control-next-icon" aria-hidden="true"></span>
  </button>
</div>

Multi item carousel - API


Import

import MultiCarousel from 'mdb-multi-carousel';
@import '~mdb-multi-carousel/css/multi-carousel.min.css';

Usage

Via data attributes

Using the Multi Item Carousel plugin doesn't require any additional JavaScript code - simply add data-mdb-multi-carousel-init attribute to .multi-carousel and use other data attributes to set all options.

<div class="multi-carousel" data-mdb-multi-carousel-init data-mdb-items="2">
  <!-- content -->
</div>

Via JavaScript

const element = document.querySelector('.multi-carousel');
const instance = new MultiCarousel(carousel);

Via jQuery

Note: By default, MDB does not include jQuery and you have to add it to the project on your own.

$(document).ready(() => {
  $('#carousel').multiCarousel('slideNext');
});

Options

Options can be passed via data attributes or JavaScript. For data attributes, append the option name to data-mdb-, as in data-mdb-breakpoint="".

Name Type Default Description
items Number | String 3 Defines number of visible items.
breakpoint Number | String | Boolean 992 Defines window breakpoint in px to show only one item. Set to false to disable.
interval Number | String | Boolean false Defines autoplay interval. Disabled as a default.

Methods

Name Parameters Description Example
init Initializes multi carousel. instance.init()
slideNext Slides to the next item. instance.slideNext()
slidePrev Slides to the previous item. instance.slidePrev()
dispose Removes the MultiCarousel instance. instance.dispose()
getInstance element Static method which allows to get the carousel instance associated with a DOM element. MultiCarousel.getInstance(element)
const carousel = document.getElementById('carousel');
const instance = MultiCarousel.getInstance(carousel);
instance.slidePrev();

Events

Name Description
slide.mdb.multiCarousel Emitted when a multiCarousel has been slid.
slid.mdb.multiCarousel Emitted after an image slide.
const carousel = document.getElementById('carousel');
carousel.addEventListener('slid.mdb.multiCarousel', (e) => {
  // do something...
})