CSS Flexbox Image Carousel

Author
In CSS Tutorial, Slideshow Dec 17, 2017

A smooth, elegant, responsive background image slider/carousel built using CSS flexbox and html radio inputs.

How to use it:

The basic HTML structure for the carousel.

<div class="mySlider"> <input type="radio" name="slider" class="slide-radio1" checked id="slider_1"> <input type="radio" name="slider" class="slide-radio2" id="slider_2"> <div class="slider-pagination"> <label for="slider_1" class="page1"></label> <label for="slider_2" class="page2"></label> </div> <div class="next control"> <label for="slider_1" class="numb1"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"> <path d="M298.3 256L131.1 81.9c-4.2-4.3-4.1-11.4.2-15.8l29.9-30.6c4.3-4.4 11.3-4.5 15.5-.2L380.9 248c2.2 2.2 3.2 5.2 3 8.1.1 3-.9 5.9-3 8.1L176.7 476.8c-4.2 4.3-11.2 4.2-15.5-.2L131.3 446c-4.3-4.4-4.4-11.5-.2-15.8L298.3 256z"/> </svg> </label> <label for="slider_2" class="numb2"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"> <path d="M298.3 256L131.1 81.9c-4.2-4.3-4.1-11.4.2-15.8l29.9-30.6c4.3-4.4 11.3-4.5 15.5-.2L380.9 248c2.2 2.2 3.2 5.2 3 8.1.1 3-.9 5.9-3 8.1L176.7 476.8c-4.2 4.3-11.2 4.2-15.5-.2L131.3 446c-4.3-4.4-4.4-11.5-.2-15.8L298.3 256z"/> </svg> </label> </div> <div class="previous control"> <label for="slider_1" class="numb1"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"> <path d="M213.7 256L380.9 81.9c4.2-4.3 4.1-11.4-.2-15.8l-29.9-30.6c-4.3-4.4-11.3-4.5-15.5-.2L131.1 247.9c-2.2 2.2-3.2 5.2-3 8.1-.1 3 .9 5.9 3 8.1l204.2 212.7c4.2 4.3 11.2 4.2 15.5-.2l29.9-30.6c4.3-4.4 4.4-11.5.2-15.8L213.7 256z"/> </svg> </label> <label for="slider_2" class="numb2"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"> <path d="M213.7 256L380.9 81.9c4.2-4.3 4.1-11.4-.2-15.8l-29.9-30.6c-4.3-4.4-11.3-4.5-15.5-.2L131.1 247.9c-2.2 2.2-3.2 5.2-3 8.1-.1 3 .9 5.9 3 8.1l204.2 212.7c4.2 4.3 11.2 4.2 15.5-.2l29.9-30.6c4.3-4.4 4.4-11.5.2-15.8L213.7 256z"/> </svg> </label> </div> <div class="slider slide_img_01"></div> <div class="slider slide_img_02"></div> </div>

The basic CSS styles for the carousel.

.mySlider { position : relative; display : block; overflow : hidden; width : 100%; max-width : 100vw; height : 100vh; max-height : 100%; margin : 0 auto; } .slider { display: flex; flex-direction: row; flex-wrap: wrap; align-items: center; justify-content: center; align-content: center; position: absolute; left: 0; top: 0; width: 100%; height: 100%; opacity: 1; z-index: 0; transition: transform 1600ms; transform: scale(1); }

Add background images to the slides.

.slide_img_01 { background : url('1.jpg') no-repeat center; background-size: cover; left: 0; } .slide_img_02 { background : url('2.jpg') no-repeat center; background-size : cover; left: 100% }

The CSS for the navigation arrows.

.control { position: absolute; top: 50%; margin-top: -24px; z-index: 55; } .control label svg { width : 48px; height : 48px; fill : #fff; stroke : currentColor; stroke-width : 0; } .control label svg:hover { transition : all .2s ease; fill : #000; } .control label { z-index: 0; display: none; cursor: pointer; opacity: 0.5; } .control label:hover { opacity: 1.0; } .next { right: 1%; } .previous { left: 1%; }

The CSS for the bottom pagination bullets.

.slider-pagination { position: absolute; bottom: 20px; width: 100%; left: 0; text-align: center; z-index: 1000; } .slider-pagination label { width: 10px; height: 10px; border-radius: 50%; display: inline-block; background: rgba(255,255,255,0.2); margin: 0 2px; border: solid 1px rgba(255,255,255,0.4); cursor: pointer; } .slide-radio1:checked ~ .next .numb2, .slide-radio2:checked ~ .next .numb1, .slide-radio2:checked ~ .previous .numb1, .slide-radio1:checked ~ .previous .numb2 { display: block; z-index: 1 } .slide-radio1:checked ~ .slider-pagination .page1, .slide-radio2:checked ~ .slider-pagination .page2 { background: rgba(255,255,255,1) }

Apply the slide animation to the carousel using CSS3 transforms.

.slide-radio1:checked ~ .slider { transform: translateX(0%); } .slide-radio2:checked ~ .slider { transform: translateX(-100%); }

Make the carousel fully responsive.

@media only screen and (max-width: 767px) { .mySlider { position : relative; width : 100%; height : 400px; } .slider > div { padding: 0 2% } .control { position: absolute; top: 60%; margin-top: -24px; z-index: 55; } .control label svg { width : 32px; height : 32px; fill : #fff; stroke : currentColor; stroke-width : 0; } }

The post CSS Flexbox Image Carousel appeared first on CSS Script.

 

Leave a Reply

Your email address will not be published. Required fields are marked *