Skip to content

卡片翻转


源代码

vue
<template>
  <div class="card-box">
    <div class="card-border"></div>
    <div class="card-obverse"></div>
    <div class="card-positive"></div>
  </div>
</template>

<style>
/* 基本样式 */
.card-box {
  width: 100%;
  height: 312.5px;
  position: relative;
}
.card-border {
  width: 189.5px;
  height: 315px;
  border: 2px solid #ffe560;
  border-radius: 10px;
  margin: 0 auto;
  opacity: 0.5;
}
.card-obverse {
  width: 186.5px;
  height: 307px;
  background: url('../../images/card-obverse.png') no-repeat center;
  background-size: 100% auto;
  position: absolute;
  top: 5px;
  left: 0;
  right: 0;
  z-index: 0;
  margin: auto;
}
.card-positive {
  width: 186.5px;
  height: 307px;
  background: url('../../images/card-positive.png') no-repeat center;
  background-size: 100% auto;
  position: absolute;
  top: 5px;
  left: 0;
  right: 0;
  z-index: 10;
  margin: auto;
}

/* 动画样式 */
.card-box {
  /* 容器添加视距,即3d内容在离你眼睛多远距离时应该呈现的效果 */
  perspective: 900px;
}
.card-border {
  transform-style: preserve-3d;
  transition: transform 2s 0s ease;
  transform-origin: 50% 50%;
  transform: rotate3d(0, 1, 0, 180deg);
}
.card-obverse {
  transform-style: preserve-3d;
  transition: transform 2s 0s ease;
  transform-origin: 50% 50%;
  transform: rotate3d(0, 1, 0, 0deg);
  /* 关键:元素旋转后元素背面隐藏 */
  backface-visibility: hidden;
}
.card-positive {
  transform-style: preserve-3d;
  transition: transform 2s 0s ease;
  transform-origin: 50% 50%;
  transform: rotate3d(0, 1, 0, -180deg);
  backface-visibility: hidden;
}

/* 鼠标滑入开始过度 */
.card-box:hover .card-obverse {
  transform: rotate3d(0, 1, 0, 180deg);
}
.card-box:hover .card-border,
.card-box:hover .card-positive {
  transform: rotate3d(0, 1, 0, 0deg);
}
</style>