在实现这个效果之前,我们需要先理解一下css3中的perspective、transform-style、backface-visibility这三个属性值。
1、概念理解
1.1 perspective
w3school上给perspective 的定义为: 3D 元素距视图的距离,可以简单理解成观察者和物体之间的距离。在css3 3D层面,你也可以把它理解为表示3D效果的一个强度。当为元素定义 perspective 属性时,其子元素会获得透视效果,而不是元素本身。
1.2 transform-style
transform-style:表示子元素需要遵循怎样的空间体系规则。当子元素需要设置空间体系规则的时候,需要在其父元素中设置这个属性。它有两个值:
- flat表示所有子元素在2D平面呈现;
- preserve-3d表示所有子元素在3D空间中呈现;
1.3 backface-visibility
backface-visibility:表示当元素不面向屏幕时是否可见。如果在旋转元素不希望看到其背面时,该属性很有用。它同样有两个值:
- visible表示背面是可见的;
- hidden表示背面是不可见的;
2、如何实现
2.1 关键HTML代码
<div class="wrapper">
<div class="card">
<div class="card-face card-front">front</div>
<div class="card-face card-back">back</div>
</div>
</div>
复制代码
2.2 关键CSS代码
.wrapper {
margin: 100px auto;
border: 1px solid #ccc;
width: 200px;
height: 300px;
perspective: 600px;
}
.card {
position: relative;
width: 100%;
height: 100%;
transition: transform 1s;
transform-style: preserve-3d;
cursor: pointer;
&.active {
transform: rotateY(180deg);
}
}
.card-face {
position: absolute;
width: 100%;
height: 100%;
line-height: 260px;
color: #fff;
text-align: center;
font-weight: bold;
font-size: 40px;
backface-visibility: hidden;
&.card-front {
background-color: #f00;
}
&.card-back {
background-color: #4577dc;
transform: rotateY(180deg);
}
}复制代码
当我们需要点击卡片实现前后反转的时候,直接在card类上增减active类即可!
2.2 实际预览效果
3、小结
如果有什么疑问或者更好的建议,欢迎在评论区留言。文笔有限,文中若有不正之处,万望告知!