3D 翻转卡片合集(4 款翻转样式,悬停/点击触发可切换)
3D 翻转卡片合集:水平翻转、垂直翻转、缩放翻转、组合动效共 4 款样式,悬停/点击触发一键切换,翻转时长可调,纯 CSS 3D 实现零依赖。
效果演示(真实可交互)
鼠标悬停时卡片水平翻转 180°,展示背面内容。
切换为「点击」模式后,单击卡片沿 X 轴垂直翻转。
翻转同时叠加轻微放大与光晕,视觉更突出。
沿 X 轴垂直翻转的变体,适合竖向卡片布局。
💡 点击模式下,单击卡片查看效果
完整代码
<div class="flip-card">
<div class="flip-inner">
<div class="face front">🚀 正面内容</div>
<div class="face back">翻转后的背面</div>
</div>
</div>
.flip-card {
width: 200px;
height: 190px;
perspective: 900px; /* 视距,3D 翻转的立体感来源 */
}
.flip-inner {
position: relative;
width: 100%;
height: 100%;
transform-style: preserve-3d;
transition: transform .65s cubic-bezier(.4, .1, .2, 1);
}
.face {
position: absolute;
inset: 0;
backface-visibility: hidden; /* 关键:背面朝外时隐藏 */
-webkit-backface-visibility: hidden;
border-radius: 14px;
}
.front { background: #6c8cff; }
.back { background: #2a2f52; transform: rotateY(180deg); }
/* 触发方式一:悬停 */
.flip-card:hover .flip-inner { transform: rotateY(180deg); }
// 触发方式二:点击(切换触发方式时使用)
document.querySelectorAll('.flip-card').forEach(card => {
card.addEventListener('click', () => card.classList.toggle('flipped'));
});
/* 配合点击模式 */
.flip-card.flipped .flip-inner { transform: rotateY(180deg); }
样式变体(仅改 transform 一行)
| 样式 | 正面→背面 | 说明 |
|---|---|---|
| 水平翻转 | rotateY(180deg) | 最经典的左右翻页效果 |
| 垂直翻转 | rotateX(180deg) | 上下翻页,适合竖向卡片 |
| 缩放翻转 | rotateY(180deg) scale(1.08) | 翻转叠加放大,视觉更抢眼 |
参数说明
| 参数 | 位置 | 说明 |
|---|---|---|
| 翻转时长 | transition: ... .65s ... | 200-1500ms,越快越干脆 |
| 触发方式 | :hover / .flipped | 悬停或点击切换类名 |
| 视距 | perspective: 900px | 300-1200px,决定翻转立体感 |
| 缓动曲线 | cubic-bezier(.4,.1,.2,1) | 标准进出曲线,可换回弹曲线 |
| 背面初始态 | .back { transform: rotateY(180deg) } | 与翻转轴必须一致,否则背面朝向错误 |
兼容性与性能
- 核心依赖
transform-style: preserve-3d与backface-visibility,Chrome 36+ / Safari 9+ / Firefox 49+ / Edge 全支持 -webkit-backface-visibility前缀已内置,iOS Safari 行为稳定- 翻转只做 transform 过渡,GPU 合成无卡顿;同一页面数十张翻转卡片也无压力
- 无障碍建议:点击模式下的卡片应使用
<button>或添加tabindex="0"与键盘事件,保证键盘可达
常见问题
Q: 翻转后背面文字是镜像的怎么办? 这是正常的 3D 行为,背面本身就应写「镜像方向」的内容;更常见的问题是背面忘加 transform: rotateY(180deg) 初始态,导致翻转时先显示一次镜像正面。
Q: 为什么有的浏览器翻转时卡片会闪一下? 通常是 backface-visibility 缺失或父级有 overflow: hidden 裁切了 3D 上下文。确保 .flip-inner 上写了 transform-style: preserve-3d,且不要在 .flip-card 上设置 overflow: hidden。
Q: 正面图片内容较多,翻转时性能如何? transform 过渡只触发合成,与内容多少无关;真正消耗性能的是图片本身的解码。建议正反面图片使用同一张(压缩后),并设置 width/height 避免布局抖动。
Q: 可以商用吗? 可以。本组件为粤喵自研原创实现,免费商用无需署名,4 款样式均可自由组合使用。
许可与来源
- 许可证:自研原创 —— 粤喵自研原创,可免费用于个人与商业项目,无需署名。查看来源公示与许可清单
- 来源:粤喵团队原创自研(从效果思路到代码实现均为独立完成,未直接复制第三方代码)
- 首次发布:2026-09-01 · 最近更新:2026-09-01
- 修改日志:2026-09-01 首次发布;2026-09-13 补充许可证与来源标注、复制按钮说明与法务页入口
- 纠错:联系页面 / min@cactus.asia,2 个工作日内核实处理
常见问题
这个组件可以商用吗?
可以。本组件为粤喵自研原创,可免费用于个人和商业项目,无需署名。
浏览器兼容性如何?
支持所有现代浏览器(Chrome / Firefox / Safari / Edge 最新版本)。旧版 IE 不支持 CSS 动画相关特性。
怎么修改动画参数?
直接调整 CSS 中的 animation-duration(时长)、animation-timing-function(缓动曲线)等属性即可,代码中有注释说明。