CSS3 实现 3D 翻转效果主要依赖 transform、perspective 和 transform-style。下面从原理到常见示例一步步讲清楚。
perspective(透视距离)决定 3D 效果的“远近感”。
.container {
perspective: 800px;
}
transform-style: preserve-3d让子元素保持 3D 空间。
.box {
transform-style: preserve-3d;
}
⚠️ 不加这个,子元素会被压扁成 2D。
transform 中的 3D 函数常用:
| 函数 | 说明 |
|---|---|
rotateX() |
绕 X 轴旋转 |
rotateY() |
绕 Y 轴旋转 |
rotateZ() |
绕 Z 轴旋转 |
translateZ() |
Z 轴位移 |
<div class="card">
<div class="front">正面</div>
<div class="back">背面</div>
</div>
.card {
width: 200px;
height: 120px;
perspective: 1000px;
}
.card .front,
.card .back {
position: absolute;
width: 100%;
height: 100%;
backface-visibility: hidden;
display: flex;
align-items: center;
justify-content: center;
font-size: 20px;
color: #fff;
}
.front {
background: #3498db;
}
.back {
background: #e74c3c;
transform: rotateY(180deg);
}
.card {
position: relative;
transform-style: preserve-3d;
transition: transform 0.8s;
}
.card:hover {
transform: rotateY(180deg);
}
rotateY(180deg)backface-visibility: hidden 防止正面透过来.card:hover {
transform: rotateX(180deg);
}
适合:
.card {
transition: transform 0.8s ease, box-shadow 0.8s;
}
.card:hover {
transform: rotateY(180deg);
box-shadow: 0 20px 40px rgba(0,0,0,.3);
}
<div class="card" onclick="this.classList.toggle('flip')">
<div class="front">正面</div>
<div class="back">背面</div>
</div>
.flip {
transform: rotateY(180deg);
}
❌ 忘记 perspective → 没有 3D 感
❌ 忘记 backface-visibility: hidden → 正反面同时显示
❌ 给父元素加 overflow: hidden → 3D 被裁剪
❌ 子元素没用 position: absolute → 翻转重叠异常
✅ 卡片翻转
✅ 商品展示
✅ 登录 / 注册切换
✅ 相册 / 图片墙
✅ 3D 菜单
如果你愿意,我可以帮你:
你打算用在什么场景?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。