A slideshow component for cycling through elements—images or slides of text—like a Carousel.
UsageNg Carousel
Carousel allows to navigate through a collection of images in a sequential fashion, moving to the previous/next one through the arrows on the sides.
Some representative placeholder content for the first slide.
Some representative placeholder content for the second slide.
Some representative placeholder content for the third slide.
<div id="CarouselBasicExample" class="Carousel Slide Carousel-fade" data-ls-ride="Carousel">
<!-- Indicators -->
<div class="Carousel-indicators">
<button type="button" class="Active" aria-current="true" aria-label="Slide 1"
data-ls-target="#CarouselBasicExample" data-ls-slide-to="0"></button>
<button type="button" aria-label="Slide 2"
data-ls-target="#CarouselBasicExample" data-ls-slide-to="1"></button>
<button type="button" aria-label="Slide 3"
data-ls-target="#CarouselBasicExample" data-ls-slide-to="2"></button>
</div>
<!-- Inner -->
<div class="Carousel-inner">
<!-- Single item -->
<div class="Carousel-item Active">
<img class="D-block W-100" src="https://source.unsplash.com/random/962x400?image=0" alt="Random 1"/>
<div class="Carousel-caption D-none D-md-block">
<h5>First slide label</h5>
<p>Some representative placeholder content for the first slide.</p>
</div>
</div>
<!-- Single item -->
<div class="Carousel-item">
<img class="D-block W-100" src="https://source.unsplash.com/random/962x400?image=1" alt="Random 2"/>
<div class="Carousel-caption D-none D-md-block">
<h5>Second slide label</h5>
<p>Some representative placeholder content for the second slide.</p>
</div>
</div>
<!-- Single item -->
<div class="Carousel-item">
<img class="D-block W-100" src="https://source.unsplash.com/random/962x400?image=2" alt="Random 3"/>
<div class="Carousel-caption D-none D-md-block">
<h5>Third slide label</h5>
<p>Some representative placeholder content for the third slide.</p>
</div>
</div>
</div>
<!-- Inner -->
<!-- Controls -->
<button class="Carousel-control-prev" type="button" data-ls-target="#CarouselBasicExample" data-ls-slide="prev">
<span class="Carousel-control-prev-icon" aria-hidden="true"></span>
<span class="Visually-hidden">Previous</span>
</button>
<button class="Carousel-control-next" type="button" data-ls-target="#CarouselBasicExample" data-ls-slide="next">
<span class="Carousel-control-next-icon" aria-hidden="true"></span>
<span class="Visually-hidden">Next</span>
</button>
</div>
Here’s a Carousel with slides only. Note the presence of the .D-block
and .W-100
on Carousel images to prevent browser default image alignment.
<div id="CarouselExampleSlidesOnly" class="Carousel Slide" data-ls-ride="Carousel">
<div class="Carousel-inner">
<div class="Carousel-item Active">
<img class="D-block W-100" src="https://source.unsplash.com/random/962x400?image=0" alt="Random 1"/>
</div>
<div class="Carousel-item">
<img class="D-block W-100" src="https://source.unsplash.com/random/962x400?image=1" alt="Random 2"/>
</div>
<div class="Carousel-item">
<img class="D-block W-100" src="https://source.unsplash.com/random/962x400?image=2" alt="Random 3"/>
</div>
</div>
</div>
Adding in the previous and next controls:
<div id="CarouselExampleControls" class="Carousel Slide" data-ls-ride="Carousel">
<div class="Carousel-inner">
<div class="Carousel-item Active">
<img class="D-block W-100" src="https://source.unsplash.com/random/962x400?image=0" alt="Random 1"/>
</div>
<div class="Carousel-item">
<img class="D-block W-100" src="https://source.unsplash.com/random/962x400?image=1" alt="Random 2"/>
</div>
<div class="Carousel-item">
<img class="D-block W-100" src="https://source.unsplash.com/random/962x400?image=2" alt="Random 3"/>
</div>
</div>
<button class="Carousel-control-prev" type="button" data-ls-target="#CarouselExampleControls"
data-ls-slide="prev">
<span class="Carousel-control-prev-icon" aria-hidden="true"></span>
<span class="Visually-hidden">Previous</span>
</button>
<button class="Carousel-control-next" type="button" data-ls-target="#CarouselExampleControls"
data-ls-slide="next">
<span class="Carousel-control-next-icon" aria-hidden="true"></span>
<span class="Visually-hidden">Next</span>
</button>
</div>
You can also add the indicators to the Carousel, alongside the controls, too.
<div id="CarouselExampleIndicators" class="Carousel Slide" data-ls-ride="Carousel">
<div class="Carousel-indicators">
<button type="button" class="Active" aria-current="true" aria-label="Slide 1"
data-ls-target="#CarouselExampleIndicators" data-ls-slide-to="0"></button>
<button type="button" aria-label="Slide 2"
data-ls-target="#CarouselExampleIndicators" data-ls-slide-to="1"></button>
<button type="button" aria-label="Slide 3"
data-ls-target="#CarouselExampleIndicators" data-ls-slide-to="2"></button>
</div>
<div class="Carousel-inner">
<div class="Carousel-item Active">
<img class="D-block W-100" src="https://source.unsplash.com/random/962x400?image=0" alt="Random 1"/>
</div>
<div class="Carousel-item">
<img class="D-block W-100" src="https://source.unsplash.com/random/962x400?image=1" alt="Random 2"/>
</div>
<div class="Carousel-item">
<img class="D-block W-100" src="https://source.unsplash.com/random/962x400?image=2" alt="Random 3"/>
</div>
</div>
<button class="Carousel-control-prev" type="button"
data-ls-target="#CarouselExampleIndicators" data-ls-slide="prev">
<span class="Carousel-control-prev-icon" aria-hidden="true"></span>
<span class="Visually-hidden">Previous</span>
</button>
<button class="Carousel-control-next" type="button"
data-ls-target="#CarouselExampleIndicators" data-ls-slide="next">
<span class="Carousel-control-next-icon" aria-hidden="true"></span>
<span class="Visually-hidden">Next</span>
</button>
</div>
Add captions to your slides easily with the .Carousel-caption
element within any .Carousel-item
. They can be easily hidden on smaller viewports, as shown below, with optional Display utilities. We hide them initially with .D-none
and bring them back on medium-sized devices with .D-md-block
.
Some representative placeholder content for the first slide.
Some representative placeholder content for the second slide.
Some representative placeholder content for the third slide.
<div id="CarouselExampleCaptions" class="Carousel Slide" data-ls-ride="Carousel">
<div class="Carousel-indicators">
<button type="button" class="Active" aria-current="true" aria-label="Slide 1"
data-ls-target="#CarouselExampleCaptions" data-ls-slide-to="0"></button>
<button type="button" aria-label="Slide 2"
data-ls-target="#CarouselExampleCaptions" data-ls-slide-to="1"></button>
<button type="button" aria-label="Slide 3"
data-ls-target="#CarouselExampleCaptions" data-ls-slide-to="2"></button>
</div>
<div class="Carousel-inner">
<div class="Carousel-item Active">
<img class="D-block W-100" src="https://source.unsplash.com/random/962x400?image=0" alt="Random 1"/>
<div class="Carousel-caption D-none D-md-block">
<h5>First slide label</h5>
<p>Some representative placeholder content for the first slide.</p>
</div>
</div>
<div class="Carousel-item">
<img class="D-block W-100" src="https://source.unsplash.com/random/962x400?image=1" alt="Random 2"/>
<div class="Carousel-caption D-none D-md-block">
<h5>Second slide label</h5>
<p>Some representative placeholder content for the second slide.</p>
</div>
</div>
<div class="Carousel-item">
<img class="D-block W-100" src="https://source.unsplash.com/random/962x400?image=2" alt="Random 3"/>
<div class="Carousel-caption D-none D-md-block">
<h5>Third slide label</h5>
<p>Some representative placeholder content for the third slide.</p>
</div>
</div>
</div>
<button class="Carousel-control-prev" type="button"
data-ls-target="#CarouselExampleCaptions" data-ls-slide="prev">
<span class="Carousel-control-prev-icon" aria-hidden="true"></span>
<span class="Visually-hidden">Previous</span>
</button>
<button class="Carousel-control-next" type="button"
data-ls-target="#CarouselExampleCaptions" data-ls-slide="next">
<span class="Carousel-control-next-icon" aria-hidden="true"></span>
<span class="Visually-hidden">Next</span>
</button>
</div>
Use fade transition on your slides easily by adding the .Carousel-fade
class to any .Carousel
.
<div id="CarouselExampleCrossfade" class="Carousel Slide Carousel-fade" data-ls-ride="Carousel">
<div class="Carousel-indicators">
<button type="button" class="Active" aria-current="true" aria-label="Slide 1"
data-ls-target="#CarouselExampleCrossfade" data-ls-slide-to="0"></button>
<button type="button" aria-label="Slide 2"
data-ls-target="#CarouselExampleCrossfade" data-ls-slide-to="1"></button>
<button type="button" aria-label="Slide 3"
data-ls-target="#CarouselExampleCrossfade" data-ls-slide-to="2"></button>
</div>
<div class="Carousel-inner">
<div class="Carousel-item Active">
<img class="D-block W-100" src="https://source.unsplash.com/random/962x400?image=0" alt="Random 1"/>
</div>
<div class="Carousel-item">
<img class="D-block W-100" src="https://source.unsplash.com/random/962x400?image=1" alt="Random 2"/>
</div>
<div class="Carousel-item">
<img class="D-block W-100" src="https://source.unsplash.com/random/962x400?image=2" alt="Random 3"/>
</div>
</div>
<button class="Carousel-control-prev" type="button"
data-ls-target="#CarouselExampleCrossfade" data-ls-slide="prev">
<span class="Carousel-control-prev-icon" aria-hidden="true"></span>
<span class="Visually-hidden">Previous</span>
</button>
<button class="Carousel-control-next" type="button"
data-ls-target="#CarouselExampleCrossfade" data-ls-slide="next">
<span class="Carousel-control-next-icon" aria-hidden="true"></span>
<span class="Visually-hidden">Next</span>
</button>
</div>
If you want to make your carousel look more "material" use the Rounded-*
and Shadow-*
classes to add rounded corners and a shadows.
Some representative placeholder content for the first slide.
Some representative placeholder content for the second slide.
Some representative placeholder content for the third slide.
<!-- Carousel wrapper -->
<div id="carouselMaterialStyle" class="Carousel Slide Carousel-fade" data-ls-ride="Carousel">
<!-- Indicators -->
<div class="Carousel-indicators">
<button type="button" class="Active" aria-current="true" aria-label="Slide 1"
data-ls-target="#carouselMaterialStyle" data-ls-slide-to="0"></button>
<button type="button" aria-label="Slide 2"
data-ls-target="#carouselMaterialStyle" data-ls-slide-to="1"></button>
<button type="button" aria-label="Slide 3"
data-ls-target="#carouselMaterialStyle" data-ls-slide-to="2"></button>
</div>
<!-- Inner -->
<div class="Carousel-inner Rounded Rounded-2 Shadow-3">
<div class="Carousel-item Active">
<img class="D-block W-100" src="https://source.unsplash.com/random/962x400?image=0" alt="Random 1"/>
<div class="Carousel-caption D-none D-md-block">
<h5>First slide label</h5>
<p>Some representative placeholder content for the first slide.</p>
</div>
</div>
<div class="Carousel-item">
<img class="D-block W-100" src="https://source.unsplash.com/random/962x400?image=1" alt="Random 2"/>
<div class="Carousel-caption D-none D-md-block">
<h5>Second slide label</h5>
<p>Some representative placeholder content for the second slide.</p>
</div>
</div>
<div class="Carousel-item">
<img class="D-block W-100" src="https://source.unsplash.com/random/962x400?image=2" alt="Random 3"/>
<div class="Carousel-caption D-none D-md-block">
<h5>Third slide label</h5>
<p>Some representative placeholder content for the third slide.</p>
</div>
</div>
</div>
<!-- Controls -->
<button class="Carousel-control-prev" type="button"
data-ls-target="#carouselMaterialStyle" data-ls-slide="prev">
<span class="Carousel-control-prev-icon" aria-hidden="true"></span>
<span class="Visually-hidden">Previous</span>
</button>
<button class="Carousel-control-next" type="button"
data-ls-target="#carouselMaterialStyle" data-ls-slide="next">
<span class="Carousel-control-next-icon" aria-hidden="true"></span>
<span class="Visually-hidden">Next</span>
</button>
</div>
<!-- Carousel wrapper -->
Add .Carousel-dark
to the .Carousel
for darker controls, indicators, and captions.
Some representative placeholder content for the first slide.
Some representative placeholder content for the second slide.
Some representative placeholder content for the third slide.
<div id="CarouselDarkVariant" class="Carousel Slide Carousel-fade Carousel-dark" data-ls-ride="Carousel">
<div class="Carousel-indicators">
<button type="button" class="Active" aria-current="true" aria-label="Slide 1"
data-ls-target="#CarouselDarkVariant" data-ls-slide-to="0"></button>
<button type="button" aria-label="Slide 2"
data-ls-target="#CarouselDarkVariant" data-ls-slide-to="1"></button>
<button type="button" aria-label="Slide 3"
data-ls-target="#CarouselDarkVariant" data-ls-slide-to="2"></button>
</div>
<div class="Carousel-inner">
<div class="Carousel-item Active">
<img class="D-block W-100" src="https://source.unsplash.com/random/962x400?image=0" alt="Random 1"/>
<div class="Carousel-caption D-none D-md-block">
<h5>First slide label</h5>
<p>Some representative placeholder content for the first slide.</p>
</div>
</div>
<div class="Carousel-item">
<img class="D-block W-100" src="https://source.unsplash.com/random/962x400?image=1" alt="Random 2"/>
<div class="Carousel-caption D-none D-md-block">
<h5>Second slide label</h5>
<p>Some representative placeholder content for the second slide.</p>
</div>
</div>
<div class="Carousel-item">
<img class="D-block W-100" src="https://source.unsplash.com/random/962x400?image=2" alt="Random 3"/>
<div class="Carousel-caption D-none D-md-block">
<h5>Third slide label</h5>
<p>Some representative placeholder content for the third slide.</p>
</div>
</div>
</div>
<button class="Carousel-control-prev" type="button"
data-ls-target="#CarouselDarkVariant" data-ls-slide="prev">
<span class="Carousel-control-prev-icon" aria-hidden="true"></span>
<span class="Visually-hidden">Previous</span>
</button>
<button class="Carousel-control-next" type="button"
data-ls-target="#CarouselDarkVariant" data-ls-slide="next">
<span class="Carousel-control-next-icon" aria-hidden="true"></span>
<span class="Visually-hidden">Next</span>
</button>
</div>
$Carousel-transition-duration : .6s !default;
$Carousel-transition : transform $Carousel-transition-duration ease-in-out !default;
$Carousel-control-width : 12% !default;
$Carousel-control-color : $White !default;
$Carousel-control-opacity : .5 !default;
$Carousel-control-hover-opacity : .9 !default;
$Carousel-control-transition : opacity .15s ease !default;
$Carousel-control-icon-width : 2rem !default;
$Carousel-control-next-icon-bg : "<svg xmlns='http://www.w3.org/2000/svg'><path fill='#{$Carousel-control-color}' d='M18.5,14.52,16.91,13l-1.58-1.57-.64-.63L12.24,8.33,4.76.94a2.91,2.91,0,0,0-4-.23,2.84,2.84,0,0,0,.23,4L8.43,12.1l2.45,2.42a.43.43,0,0,1,0,.63L8.43,17.57,1,25a2.83,2.83,0,0,0-.23,4,2.9,2.9,0,0,0,4-.23l7.48-7.39,2.45-2.42.64-.63,1.58-1.57,1.59-1.56A.43.43,0,0,0,18.5,14.52Z' /></svg>";
$Carousel-control-prev-icon-bg : "<svg xmlns='http://www.w3.org/2000/svg'><path fill='#{$Carousel-control-color}' d='M.13,15.15l1.59,1.56,1.59,1.57.63.63,2.45,2.42,7.48,7.39a2.9,2.9,0,0,0,4,.23,2.82,2.82,0,0,0-.23-4L10.2,17.57,7.75,15.15a.45.45,0,0,1,0-.63L10.2,12.1l7.48-7.39a2.83,2.83,0,0,0,.23-4,2.91,2.91,0,0,0-4,.23L6.39,8.33,3.94,10.75l-.63.63L1.72,13,.13,14.52A.45.45,0,0,0,.13,15.15Z' /></svg>";
$Carousel-indicator-width : 30px !default;
$Carousel-indicator-height : 3px !default;
$Carousel-indicator-spacer : 3px !default;
$Carousel-indicator-opacity : .5 !default;
$Carousel-indicator-active-bg : $White !default;
$Carousel-indicator-active-opacity : 1 !default;
$Carousel-indicator-transition : opacity .6s ease !default;
$Carousel-indicator-hit-area-height : 10px !default;
$Carousel-caption-width : 70% !default;
$Carousel-caption-spacer : 1.25rem !default;
$Carousel-caption-color : $White !default;
$Carousel-caption-padding-y : 1.25rem !default;
$Carousel-dark-indicator-active-bg : $Black !default;
$Carousel-dark-caption-color : $Black !default;
$Carousel-dark-control-icon-filter : invert(1) grayscale(100) !default;