diff options
| author | Mark Otto <[email protected]> | 2016-12-05 23:31:14 -0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2016-12-05 23:31:14 -0800 |
| commit | ede925d79bf92d5983a4508c6ed6fda9310e1e8b (patch) | |
| tree | 2106dc9b4f97d109f91c06a31234802c8d1890b6 /docs/components | |
| parent | 306f75216d2b66bfe8e6e4b587939491e637b8da (diff) | |
| parent | e0edea0d1a69d51990cb8d8de41183e94331b3a2 (diff) | |
| download | bootstrap-ede925d79bf92d5983a4508c6ed6fda9310e1e8b.tar.xz bootstrap-ede925d79bf92d5983a4508c6ed6fda9310e1e8b.zip | |
Merge pull request #21298 from twbs/carousel
Refactor carousel
Diffstat (limited to 'docs/components')
| -rw-r--r-- | docs/components/carousel.md | 124 |
1 files changed, 86 insertions, 38 deletions
diff --git a/docs/components/carousel.md b/docs/components/carousel.md index 3942309f0..8dd819fba 100644 --- a/docs/components/carousel.md +++ b/docs/components/carousel.md @@ -5,7 +5,11 @@ description: A slideshow component for cycling through elements—images or slid group: components --- -A slideshow component for cycling through elements—images or slides of text—like a carousel. In browsers where the [Page Visibility API](https://www.w3.org/TR/page-visibility/) is supported, the carousel will avoid sliding when the webpage is not visible to the user (such as when the browser tab is inactive, the browser window is minimized, etc.). **Nested carousels are not supported.** +The carousel is a slideshow for cycling through a series of content, built with CSS 3D transforms and a bit of JavaScript. It works with a series of images, text, or custom markup. It also includes support for previous/next controls and indicators. + +In browsers where the [Page Visibility API](https://www.w3.org/TR/page-visibility/) is supported, the carousel will avoid sliding when the webpage is not visible to the user (such as when the browser tab is inactive, the browser window is minimized, etc.). + +Please be aware that nested carousels are not supported, and carousels are generally not compliant with accessibility standards. ## Contents @@ -14,32 +18,86 @@ A slideshow component for cycling through elements—images or slides of text— ## Example -When building carousels, be sure your slides are the same size as one another. The carousel doesn't automatically crop images to the same dimensions for you across slides. +Carousels don't automatically normalize slide dimensions. As such, you may need to use additional utilities or custom styles to appropriately size content. While carousels support previous/next controls and indicators, they're not explicitly required. Add and customize as you see fit. + +Be sure to set a unique id on the `.carousel` for optional controls, especially if you're using multiple carousels on a single page. + +### Slides only + +Here's a carousel with slides only. Note the presence of the `.d-block` and `.img-fluid` on carousel images to prevent browser default image alignment. + +{% example html %} +<div id="carouselExampleSlidesOnly" class="carousel slide" data-ride="carousel"> + <div class="carousel-inner" role="listbox"> + <div class="carousel-item active"> + <img class="d-block img-fluid" data-src="holder.js/800x400?auto=yes&bg=777&fg=555&text=First slide" alt="First slide"> + </div> + <div class="carousel-item"> + <img class="d-block img-fluid" data-src="holder.js/800x400?auto=yes&bg=666&fg=444&text=Second slide" alt="Second slide"> + </div> + <div class="carousel-item"> + <img class="d-block img-fluid" data-src="holder.js/800x400?auto=yes&bg=555&fg=333&text=Third slide" alt="Third slide"> + </div> + </div> +</div> +{% endexample %} + +### With controls + +Adding in the previous and next controls: + +{% example html %} +<div id="carouselExampleControls" class="carousel slide" data-ride="carousel"> + <div class="carousel-inner" role="listbox"> + <div class="carousel-item active"> + <img class="d-block img-fluid" data-src="holder.js/800x400?auto=yes&bg=777&fg=555&text=First slide" alt="First slide"> + </div> + <div class="carousel-item"> + <img class="d-block img-fluid" data-src="holder.js/800x400?auto=yes&bg=666&fg=444&text=Second slide" alt="Second slide"> + </div> + <div class="carousel-item"> + <img class="d-block img-fluid" data-src="holder.js/800x400?auto=yes&bg=555&fg=333&text=Third slide" alt="Third slide"> + </div> + </div> + <a class="carousel-control-prev" href="#carouselExampleControls" role="button" data-slide="prev"> + <span class="carousel-control-prev-icon" aria-hidden="true"></span> + <span class="sr-only">Previous</span> + </a> + <a class="carousel-control-next" href="#carouselExampleControls" role="button" data-slide="next"> + <span class="carousel-control-next-icon" aria-hidden="true"></span> + <span class="sr-only">Next</span> + </a> +</div> +{% endexample %} + +### With indicators + +You can also add the indicators to the carousel, alongside the controls, too. {% example html %} -<div id="carousel-example-generic" class="carousel slide" data-ride="carousel"> +<div id="carouselExampleIndicators" class="carousel slide" data-ride="carousel"> <ol class="carousel-indicators"> - <li data-target="#carousel-example-generic" data-slide-to="0" class="active"></li> - <li data-target="#carousel-example-generic" data-slide-to="1"></li> - <li data-target="#carousel-example-generic" data-slide-to="2"></li> + <li data-target="#carouselExampleIndicators" data-slide-to="0" class="active"></li> + <li data-target="#carouselExampleIndicators" data-slide-to="1"></li> + <li data-target="#carouselExampleIndicators" data-slide-to="2"></li> </ol> <div class="carousel-inner" role="listbox"> <div class="carousel-item active"> - <img data-src="holder.js/900x500/auto/#777:#555/text:First slide" alt="First slide"> + <img class="d-block img-fluid" data-src="holder.js/800x400?auto=yes&bg=777&fg=555&text=First slide" alt="First slide"> </div> <div class="carousel-item"> - <img data-src="holder.js/900x500/auto/#666:#444/text:Second slide" alt="Second slide"> + <img class="d-block img-fluid" data-src="holder.js/800x400?auto=yes&bg=666&fg=444&text=Second slide" alt="Second slide"> </div> <div class="carousel-item"> - <img data-src="holder.js/900x500/auto/#555:#333/text:Third slide" alt="Third slide"> + <img class="d-block img-fluid" data-src="holder.js/800x400?auto=yes&bg=555&fg=333&text=Third slide" alt="Third slide"> </div> </div> - <a class="left carousel-control" href="#carousel-example-generic" role="button" data-slide="prev"> - <span class="icon-prev" aria-hidden="true"></span> + <a class="carousel-control-prev" href="#carouselExampleIndicators" role="button" data-slide="prev"> + <span class="carousel-control-prev-icon" aria-hidden="true"></span> <span class="sr-only">Previous</span> </a> - <a class="right carousel-control" href="#carousel-example-generic" role="button" data-slide="next"> - <span class="icon-next" aria-hidden="true"></span> + <a class="carousel-control-next" href="#carouselExampleIndicators" role="button" data-slide="next"> + <span class="carousel-control-next-icon" aria-hidden="true"></span> <span class="sr-only">Next</span> </a> </div> @@ -57,45 +115,45 @@ Bootstrap exclusively uses CSS3 for its animations, but Internet Explorer 9 does The `.active` class needs to be added to one of the slides. Otherwise, the carousel will not be visible. {% endcallout %} -### Optional captions +### With captions -Add captions to your slides easily with the `.carousel-caption` element within any `.carousel-item`. Place just about any optional HTML within there and it will be automatically aligned and formatted. +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]({{ site.baseurl }}/utilities/display-property/). We hide them initially with `.d-none` and bring them back on medium-sized devices with `.d-md-block`. <div class="bd-example"> - <div id="carousel-example-captions" class="carousel slide" data-ride="carousel"> + <div id="carouselExampleCaptions" class="carousel slide" data-ride="carousel"> <ol class="carousel-indicators"> - <li data-target="#carousel-example-captions" data-slide-to="0" class="active"></li> - <li data-target="#carousel-example-captions" data-slide-to="1"></li> - <li data-target="#carousel-example-captions" data-slide-to="2"></li> + <li data-target="#carouselExampleCaptions" data-slide-to="0" class="active"></li> + <li data-target="#carouselExampleCaptions" data-slide-to="1"></li> + <li data-target="#carouselExampleCaptions" data-slide-to="2"></li> </ol> <div class="carousel-inner" role="listbox"> <div class="carousel-item active"> - <img data-src="holder.js/900x500/auto/#777:#777" alt="First slide image"> - <div class="carousel-caption"> + <img class="d-block img-fluid" data-src="holder.js/800x400?auto=yes&bg=777&fg=555&text=First slide" alt="First slide"> + <div class="carousel-caption d-none d-md-block"> <h3>First slide label</h3> <p>Nulla vitae elit libero, a pharetra augue mollis interdum.</p> </div> </div> <div class="carousel-item"> - <img data-src="holder.js/900x500/auto/#666:#666" alt="Second slide image"> - <div class="carousel-caption"> + <img class="d-block img-fluid" data-src="holder.js/800x400?auto=yes&bg=666&fg=444&text=Second slide" alt="Second slide"> + <div class="carousel-caption d-none d-md-block"> <h3>Second slide label</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p> </div> </div> <div class="carousel-item"> - <img data-src="holder.js/900x500/auto/#555:#555" alt="Third slide image"> - <div class="carousel-caption"> + <img class="d-block img-fluid" data-src="holder.js/800x400?auto=yes&bg=555&fg=333&text=Third slide" alt="Third slide"> + <div class="carousel-caption d-none d-md-block"> <h3>Third slide label</h3> <p>Praesent commodo cursus magna, vel scelerisque nisl consectetur.</p> </div> </div> </div> - <a class="left carousel-control" href="#carousel-example-captions" role="button" data-slide="prev"> + <a class="carousel-control carousel-control-left" href="#carouselExampleCaptions" role="button" data-slide="prev"> <span class="icon-prev" aria-hidden="true"></span> <span class="sr-only">Previous</span> </a> - <a class="right carousel-control" href="#carousel-example-captions" role="button" data-slide="next"> + <a class="carousel-control carousel-control-right" href="#carouselExampleCaptions" role="button" data-slide="next"> <span class="icon-next" aria-hidden="true"></span> <span class="sr-only">Next</span> </a> @@ -105,25 +163,15 @@ Add captions to your slides easily with the `.carousel-caption` element within a {% highlight html %} <div class="carousel-item"> <img src="..." alt="..."> - <div class="carousel-caption"> + <div class="carousel-caption d-none d-md-block"> <h3>...</h3> <p>...</p> </div> </div> {% endhighlight %} -{% callout danger %} -#### Accessibility issue - -The carousel component is generally not compliant with accessibility standards. If you need to be compliant, please consider other options for presenting your content. -{% endcallout %} - ## Usage -### Multiple carousels - -Carousels require the use of an `id` on the outermost container (the `.carousel`) for carousel controls to function properly. When adding multiple carousels, or when changing a carousel's `id`, be sure to update the relevant controls. - ### Via data attributes Use data attributes to easily control the position of the carousel. `data-slide` accepts the keywords `prev` or `next`, which alters the slide position relative to its current position. Alternatively, use `data-slide-to` to pass a raw slide index to the carousel `data-slide-to="2"`, which shifts the slide position to a particular index beginning with `0`. |
