答案是使用CSS的transform和transition属性结合3D变换实现卡片翻转。首先设置perspective和preserve-3d营造3D环境,通过backface-visibility隐藏背面,利用transition定义过渡动画,再用:hover触发rotateY实现翻转,正面默认显示,背面初始旋转180度,悬停时容器翻转,完成平滑切换。

在CSS中实现卡片翻转效果,关键在于使用 transform 和 transition 属性,配合3D变换来完成平滑的翻转动画。整个过程不需要JavaScript也能实现基础效果。
1. 基本结构与样式设置
先构建一个包含前后两面的卡片容器。HTML结构通常如下:
为这个结构设置基本样式,确保容器支持3D变换:
.card {perspective: 1000px;
} .card-inner {
width: 200px;
height: 300px;
transition: transform 0.6s;
transform-style: preserve-3d;
position: relative;
} .card-face {
width: 100%;
height: 100%;
position: absolute;
backface-visibility: hidden;
display: flex;
align-items: center;
justify-content: center;
border: 1px solid #ccc;
border-radius: 8px;
} .front {
background: #fff;
} .back {
background: #007bff;
color: white;
transform: rotateY(180deg);
}
2. 添加翻转交互(悬停触发)
通过:hover伪类让鼠标悬停时触发翻转:
立即学习“前端免费学习笔记(深入)”;
transform: rotateY(180deg);
}
这样当鼠标移到卡片上时,.card-inner会绕Y轴旋转180度,正面隐藏,背面显示。由于设置了 backface-visibility: hidden,被翻转到背面的元素不会显示,视觉更真实。
3. 关键属性说明
- perspective:定义3D空间的透视距离,值越小透视感越强
- transform-style: preserve-3d:确保子元素也处于3D空间中
- backface-visibility: hidden:隐藏元素背面对避免双面重叠很重要
- transition:控制 transform 变化的过渡时间和缓动效果
4. 可扩展方向
如果想用点击切换而不是悬停,可以用JavaScript切换类名:
.card-flipped {transform: rotateY(180deg);
}
然后通过JS添加或移除该类来控制状态。
基本上就这些。不复杂但容易忽略细节,比如忘记preserve-3d或backface-visibility会导致翻转失败。










