Flip card
by Milan Gladiš
HTML
<div class="scene scene--card">
<div class="card">
<div class="card__face card__face--front">front</div>
<div class="card__face card__face--back">back</div>
</div>
</div>
CSS
body { font-family: sans-serif; display:flex; align-items: center; justify-content:center;width: 100vw; height: 100vh;}
.scene {
width: 400px;
height: 120px;
/* border: 1px solid #CCC; */
margin: 40px 0;
perspective: 600px;
}
.card {
position: relative;
width: 100%;
height: 100%;
cursor: pointer;
transform-style: preserve-3d;
transform-origin: center bottom; /* Adjusted for vertical flip */
transition: transform 1s;
border-radius: 1000px;
}
.card.is-flipped {
transform: translateY(-100%) rotateX(-180deg);
border-radius: 1000px;
}
.card__face {
position: absolute;
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content:center;
color: white;
text-align: center;
font-weight: semi-bold;
font-size: 16px;
backface-visibility: hidden;
border-radius: 1000px;
}
.card__face--front {
background: red;
}
.card__face--back {
background: blue;
transform: rotateX(180deg);
}
JavaScript
var card = document.querySelector('.card');
card.addEventListener( 'click', function() {
card.classList.toggle('is-flipped');
});