<div class="container">
<div class="card-stack">
<a class="buttons prev" href="#"><</a>
<ul class="card-list">
<li class="card">1</li>
<li class="card">2</li>
<li class="card">3</li>
<li class="card">4</li>
<li class="card">5</li>
</ul>
<a class="buttons next" href="#">></a>
</div>
</div>
.container {
width: 100%;
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
background-color: #fff;
padding: 50px 80px;
}
.container .card-stack {
width: 500px;
height: 250px;
position: absolute;
margin: 20px auto;
}
.container .card-stack .buttons {
display: none;
position: absolute;
background: rgba(0, 0, 0, 0.46);
border: 2px solid rgba(255, 255, 255, 0.7);
border-radius: 50%;
width: 35px;
height: 35px;
left: 0;
top: 55%;
color: rgba(255, 255, 255, 0.7);
text-align: center;
line-height: 35px;
text-decoration: none;
font-size: 22px;
z-index: 100;
outline: none;
transition: all 0.2s ease;
}
.container .card-stack .buttons:hover {
transform: scale(1.3, 1.3);
}
.container .card-stack .prev {
left: 15px;
right: auto;
}
.container .card-stack .next {
left: auto;
right: 15px;
}
.container .card-stack .carousel .buttons:hover {
color: #C01313;
background: #fff;
}
.container .card-stack .card-list {
width: 300px;
}
.container .card-stack .card-list__image {
height: 200px;
}
.container .card-stack .card-list__text {
color: #fff;
font-weight: 300;
}
.container .card-stack .card-list li {
display: flex;
justify-content: center;
align-items: center;
color: #fff;
font-size: 10em;
transition: all 100ms ease-in-out;
border-radius: 10px;
position: absolute;
list-style: none;
height: 300px;
left: 0;
right: 0;
margin: 0 auto;
padding-top: 20px;
text-align: center;
background-color: #C01313;
box-shadow: 0 0 20px 3px rgba(0, 0, 0, 0.8);
}
.container .card-stack .card-list li:nth-child(1) {
top: 50px;
width: 80%;
}
.container .card-stack .card-list li:nth-child(2) {
top: 40px;
width: 85%;
}
.container .card-stack .card-list li:nth-child(3) {
top: 30px;
width: 90%;
}
.container .card-stack .card-list li:nth-child(4) {
top: 15px;
width: 95%;
}
.container .card-stack .card-list li:nth-child(5) {
top: 0;
width: 100%;
}
.container .card-stack:hover > .buttons.prev {
display: block;
animation: bounceInLeft 200ms;
}
.container .card-stack:hover > .buttons.next {
display: block;
animation: bounceInRight 200ms;
}
.transformRight {
animation: toRight 500ms;
}
.transformLeft {
animation: toLeft 500ms;
}
.transformPrev {
animation: scaleUp 100ms;
display: none;
}
@keyframes toLeft {
0% {
transform: rotate(-5deg) translate(-50px, -50px);
opacity: 1;
}
20% {
transform: rotate(-15deg) translate(-150px, -120px);
opacity: 1;
}
40% {
transform: rotate(-25deg) translate(-250px, -180px);
opacity: 0.98;
}
60% {
transform: rotate(-40deg) translate(-350px, -250px);
opacity: 0.95;
}
80% {
transform: rotate(-55deg) translate(-450px, -370px);
opacity: 0.9;
}
100% {
transform: rotate(-70deg) translate(-600px, -550px);
opacity: 0;
}
}
@keyframes toRight {
0% {
transform: rotate(5deg) translate(50px, -50px);
opacity: 1;
}
20% {
transform: rotate(15deg) translate(150px, -120px);
opacity: 1;
}
40% {
transform: rotate(25deg) translate(250px, -180px);
opacity: 0.98;
}
60% {
transform: rotate(40deg) translate(350px, -250px);
opacity: 0.95;
}
80% {
transform: rotate(55deg) translate(450px, -370px);
opacity: 0.85;
}
100% {
transform: rotate(70deg) translate(600px, -550px);
opacity: 0;
}
}
@keyframes scaleCard {
0% {
top: 5px;
}
100% {
top: 24px;
}
}
@keyframes bounceInLeft {
0% {
opacity: 0;
transform: translateX(40px);
}
100% {
transform: translateX(0);
}
}
@keyframes bounceInRight {
0% {
opacity: 0;
transform: translateX(-40px);
}
100% {
transform: translateX(0);
}
}
let $card = $('.card');
let lastCard = $(".card-list .card").length - 1;
function sliderPrev(e){
e.preventDefault();
let appendToList = function() {
if( $('.card').hasClass('activeNow') ) {
let $slicedCard = $('.card').slice(lastCard).removeClass('transformLeft activeNow');
$('ul').prepend($slicedCard);
}
}
$('li').last().removeClass('transformPrev').addClass('transformLeft').prev().addClass('activeNow');
setTimeout(function(){appendToList(); }, 150);
}
function sliderNext(e){
e.preventDefault();
let prependList = function() {
if( $('.card').hasClass('activeNow') ) {
let $slicedCard = $('.card').slice(lastCard).removeClass('transformRight activeNow');
$('ul').prepend($slicedCard);
}
}
$('li').last().removeClass('transformPrev').addClass('transformRight').prev().addClass('activeNow');
setTimeout(function(){prependList(); }, 150);
}
$('.prev').click(sliderPrev);
$('.next').click(sliderNext);
This Pen doesn't use any external CSS resources.