必须用transform-style: preserve-3d启用3d上下文,配合perspective和backface-visibility: hidden实现稳定翻转,结构需嵌套双面容器并用:hover或js切换class控制rotatey()。

用 CSS transform + transition 实现卡片翻转
HTML 本身不提供翻转动画能力,必须靠 CSS 的 transform: rotateY() 配合 transition 来驱动。核心是让前后两面共用一个容器,通过父容器的旋转状态切换显示面。
常见错误是直接给两个 div 分别加动画,结果两面错位、遮挡异常,或翻转后内容倒置——本质是没有启用 3D 渲染上下文和正确设置 backface-visibility。
- 父容器需设
transform-style: preserve-3d,否则子元素旋转会扁平化 - 前后两面都得加
backface-visibility: hidden,否则翻转 180° 后背面文字会镜像显示 - 翻转触发建议用
:hover或 JS 切换 class,避免用click+ 内联样式,否则难以控制过渡节奏 - 过渡时间别设太短(如
0.2s),否则肉眼难识别翻转过程;也别超过0.6s,否则交互迟滞
HTML 结构必须是嵌套式双面容器
不能把正面和背面写成同级兄弟元素,否则无法共享旋转轴心。典型结构是一个外层 card 包裹 card-inner,再由 card-front 和 card-back 作为其子元素并列存在。
示例结构:
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
<div class="card">
<div class="card-inner">
<div class="card-front">正面内容</div>
<div class="card-back">背面内容</div>
</div>
</div>
-
.card是翻转触发容器,设宽高和perspective -
.card-inner是实际旋转元素,transform: rotateY(0deg)或rotateY(180deg) -
.card-front和.card-back都需绝对定位、全尺寸覆盖,且 z 轴位置要明确(如 front 设z-index: 2,back 设z-index: 1)
关键 CSS 属性缺一不可
漏掉任意一个都可能导致翻转卡顿、消失、或只动一半。重点不是“怎么写”,而是“为什么必须这么写”。
-
perspective: 1500px必须加在.card上,数值越小透视感越强,但太小(如300px)会让背面缩得太小看不清 -
transform-style: preserve-3d必须加在.card-inner上,否则.card-front和.card-back的 3D 位置会被压平 -
transform: rotateY(180deg)加在.card-inner上实现翻转;rotateX()可做上下翻,但需同步调transform-origin - 所有涉及旋转的元素都必须设
backface-visibility: hidden,包括 front 和 back 两个面
移动端点击翻转要注意 touch 兼容性
纯 :hover 在 iOS 和 Android 大部分浏览器里不触发,必须用 JS 绑定 click 或 touchstart,并切换 class 控制旋转状态。
常见坑:
- 没加
cursor: pointer,用户不知道可点;iOS 上还要加onclick=""空属性或touch-action: manipulation才能激活 :active - 用
toggle切换 class 时,若没重置transform,第二次点击可能无反应——因为从rotateY(180deg)再翻 180° 还是 180°,得显式设回0deg - 安卓低版本 WebView 对
preserve-3d支持差,可降级为用opacity+visibility模拟翻转感
真正难的不是写出翻转,而是让翻转在各种设备上不闪、不跳、不卡、不消失。perspective 值、backface-visibility、transform-style 这三者只要有一个配置错,整个效果就不可控。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










