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');
});