Pure CSS "carousel"(heavy emphasis on the quotes there)
Leveraging use of how elements behave in the DOM in combination with features of CSS makes implementing a pure CSS "carousel" relatively trivial.
Read more in a blog post here Enjoy!
Pure CSS "carousel"(heavy emphasis on the quotes there)
Leveraging use of how elements behave in the DOM in combination with features of CSS makes implementing a pure CSS "carousel" relatively trivial.
Read more in a blog post here Enjoy!
h3 Pure CSS carousels | |
.carousel-container | |
h2 fade in/out | |
ul.carousel.my-carousel | |
- var panels = ['A', 'B', 'C', 'D', 'E'] | |
each val in panels | |
input.carousel__activator(type="radio", id=val, name='activator' checked=(val == panels[0])) | |
each val, idx in panels | |
.carousel__controls | |
label.carousel__control.carousel__control--backward(for=`${(idx == 0) ? panels[panels.length - 1] : panels[idx - 1]}` ) | |
label.carousel__control.carousel__control--forward(for= `${(idx == panels.length - 1) ? panels[0] : panels[idx + 1]}`) | |
each val in panels | |
li.carousel__slide | |
h1= val | |
.carousel__indicators | |
each val in panels | |
label.carousel__indicator(for=val) | |
.carousel-container | |
h2 slider | |
.carousel.my-carousel.carousel--translate | |
- var panels = ['F', 'G', 'H', 'I', 'J'] | |
each val in panels | |
input.carousel__activator(type="radio", name="carousel", id=val, checked=(val == panels[0])) | |
each val, idx in panels | |
.carousel__controls | |
label.carousel__control.carousel__control--backward(for=`${(idx == 0) ? panels[panels.length - 1] : panels[idx - 1]}` ) | |
label.carousel__control.carousel__control--forward(for= `${(idx == panels.length - 1) ? panels[0] : panels[idx + 1]}`) | |
.carousel__track | |
each val in panels | |
li.carousel__slide | |
h1= val | |
.carousel__indicators | |
each val in panels | |
label.carousel__indicator(for=val) | |
.carousel-container | |
h2 thumbnail indicators | |
ul.carousel.my-carousel.carousel--thumb | |
- var panels = ['K', 'L', 'M', 'N', 'O'] | |
each val in panels | |
input.carousel__activator(type="radio", id=val, name='thumb' checked=(val == panels[0])) | |
each val, idx in panels | |
.carousel__controls | |
label.carousel__control.carousel__control--backward(for=`${(idx == 0) ? panels[panels.length - 1] : panels[idx - 1]}` ) | |
label.carousel__control.carousel__control--forward(for= `${(idx == panels.length - 1) ? panels[0] : panels[idx + 1]}`) | |
each val in panels | |
li.carousel__slide | |
h1= val | |
.carousel__indicators | |
each val in panels | |
label.carousel__indicator(for=val) | |
.carousel-container | |
h2 scale | |
ul.carousel.my-carousel.carousel--scale | |
- var panels = ['P', 'Q', 'R', 'S', 'T'] | |
each val in panels | |
input.carousel__activator(type="radio", id=val, name='scale' checked=(val == panels[0])) | |
each val, idx in panels | |
.carousel__controls | |
label.carousel__control.carousel__control--backward(for=`${(idx == 0) ? panels[panels.length - 1] : panels[idx - 1]}` ) | |
label.carousel__control.carousel__control--forward(for= `${(idx == panels.length - 1) ? panels[0] : panels[idx + 1]}`) | |
each val in panels | |
li.carousel__slide | |
h1= val | |
.carousel__indicators | |
each val in panels | |
label.carousel__indicator(for=val) |
@import url('https://fonts.googleapis.com/css?family=Roboto:900'); | |
/** | |
* style variables | |
*/ | |
$noOfSlides = 5 | |
$carouselHeight = 300px | |
$carouselWidth = 400px | |
$carouselIndicatorSize = 15px | |
$carouselControlSize = 30px | |
$slideTransition = .5s | |
/** | |
* Control & indicator mixin | |
*/ | |
.carousel | |
height $carouselHeight | |
width $carouselWidth | |
overflow hidden | |
text-align center | |
position relative | |
padding 0 | |
list-style none | |
// &__slide | |
&__controls | |
&__activator | |
display none | |
/** | |
* Where the magic happens | |
*/ | |
for num in 1..$noOfSlides | |
&__activator:nth-of-type({num}) | |
&:checked ~ .carousel__track | |
transform translateX(-((num - 1) * 100%)) | |
&:checked ~ .carousel__slide:nth-of-type({num}) | |
transition opacity $slideTransition, transform $slideTransition | |
top 0 | |
left 0 | |
right 0 | |
opacity 1 | |
transform scale(1) | |
&:checked ~ .carousel__controls:nth-of-type({num}) | |
display block | |
opacity 1 | |
&:checked ~ .carousel__indicators .carousel__indicator:nth-of-type({num}) | |
opacity 1 | |
/** | |
* Control element - right/left arrows | |
*/ | |
&__control | |
height $carouselControlSize | |
width $carouselControlSize | |
margin-top -($carouselControlSize / 2) | |
top 50% | |
position absolute | |
display block | |
cursor pointer | |
border-width 5px 5px 0 0 | |
border-style solid | |
border-color #fafafa | |
opacity .35 | |
outline 0 | |
z-index 3 | |
&:hover | |
opacity 1 | |
&--backward | |
left 10px | |
transform rotate(-135deg) | |
&--forward | |
right 10px | |
transform rotate(45deg) | |
/** | |
* Element for holding slide indicators | |
*/ | |
&__indicators | |
position absolute | |
bottom 20px | |
width 100% | |
text-align center | |
/** | |
* Indicator for indicating active slide | |
*/ | |
&__indicator | |
height $carouselIndicatorSize | |
width $carouselIndicatorSize | |
border-radius 100% | |
display inline-block | |
z-index 2 | |
cursor pointer | |
opacity .35 | |
margin 0 2.5px 0 2.5px | |
&:hover | |
opacity .75 | |
/** | |
* Create rules for when slides are contained within a track | |
*/ | |
&__track | |
position absolute | |
top 0 | |
right 0 | |
bottom 0 | |
left 0 | |
padding 0 | |
margin 0 | |
transition transform $slideTransition ease 0s | |
.carousel__slide | |
display block | |
top 0 | |
left 0 | |
right 0 | |
opacity 1 | |
for num in (1..$noOfSlides) | |
&:nth-of-type({num}) | |
transform translateX((num - 1) * 100%) | |
&--scale | |
.carousel__slide | |
transform scale(0) | |
&__slide | |
height 100% | |
position absolute | |
overflow-y auto | |
opacity 0 | |
/** | |
* Theming | |
*/ | |
* | |
box-sizing border-box | |
html | |
body | |
background-color #111 | |
font-family 'Roboto', sans-serif | |
text-align center | |
color white | |
.carousel-container | |
display inline-block | |
.my-carousel | |
border-radius 5px | |
margin 30px | |
.carousel__slide | |
overflow hidden | |
.carousel | |
&--thumb .carousel__indicator | |
height 30px | |
width 30px | |
h1 | |
font-size 50px | |
line-height 50px | |
color #fafafa | |
position absolute | |
top 50% | |
width 100% | |
text-align center | |
margin-top -25px | |
h2 | |
h3 | |
color #fafafa | |
h3 | |
font-size 50px | |
.carousel__indicator | |
background-color #fafafa | |
for num in (1..$noOfSlides) | |
.carousel__slide:nth-of-type({num}) | |
.carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type({num}) | |
// multiply to get better quality pics | |
background-image url('https://unsplash.it/' + (num * 3) + '00?random') | |
background-size cover | |
background-position center |