答案是使用css3的transform、perspective和backface-visibility属性配合html结构实现3D卡片翻转。首先创建包含前后两面的card-container容器,通过设置perspective营造3D透视,利用transform-style: preserve-3d保持3D空间,使子元素旋转时不坍缩;.card应用transition实现过渡动画,hover时rotateY(180deg)触发翻转,.front与.back分别设置正背面样式,并用backface-visibility: hidden隐藏翻转后不可见的一面;可选javaScript通过toggle添加is-flipped类实现点击翻转,替代hover交互;进一步优化可调整transition曲线为cubic-bezier并增强box-shadow提升视觉层次。关键点在于preserve-3d和backface-visibility的正确使用,否则会导致3D效果失效或闪烁。

实现卡片翻转效果,尤其是带有3D动画的翻转,主要依赖css3的transform和perspective属性,html5提供结构支持。下面一步步教你如何制作一个平滑的3D卡片翻转动画。
1. 基本HTML结构
创建一个容器,包含正面和背面两个面,组成一张可翻转的卡片:
<div class="card-container"> <div class="card"> <div class="card-face front">正面内容</div> <div class="card-face back">背面内容</div> </div> </div>
2. CSS设置3D翻转样式
关键在于使用transform-style: preserve-3d和rotateY来实现翻转动画。
.card-container { perspective: 1000px; } .card { width: 300px; height: 200px; position: relative; transform-style: preserve-3d; transition: transform 0.6s ease; } .card:hover { transform: rotateY(180deg); } .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; align-items: center; justify-content: center; font-size: 18px; border-radius: 10px; box-shadow: 0 4px 8px rgba(0,0,0,0.2); } .front { background: #4CAF50; color: white; } .back { background: #2196F3; color: white; transform: rotateY(180deg); }
说明:
立即学习“前端免费学习笔记(深入)”;
- perspective:定义3D空间的透视距离,值越小透视感越强。
- transform-style: preserve-3d:确保子元素也处于3D空间中。
- backface-visibility: hidden:翻转时隐藏背面不可见的一面。
- rotateY(180deg):使元素沿Y轴旋转180度,实现翻转。
3. 可选:点击触发翻转
如果不想用hover,可以用javascript控制点击翻转:
const card = document.querySelector('.card'); card.addEventListener('click', () => { card.classlist.toggle('is-flipped'); });
对应CSS改为:
.card.is-flipped { transform: rotateY(180deg); }
4. 添加3D动画优化体验
可以加入更自然的动画曲线和阴影变化:
.card { transform-style: preserve-3d; transition: all 0.6s cubic-bezier(0.4, 0.0, 0.2, 1); } .card:hover { box-shadow: 0 10px 25px rgba(0,0,0,0.3); }
基本上就这些。通过HTML搭建结构,CSS控制3D变换与动画,就能实现流畅的卡片翻转效果。不复杂但容易忽略细节,比如backface-visibility和preserve-3d,少了它们3D翻转会失效或闪烁。


