CSS 3D轮播需perspective、preserve-3d、backface-visibility:hidden三者配合,transform-origin设center,JS仅管理active类切换,避免多active并存及DOM未就绪问题。
纯 HTML + CSS 就能做出卡片式翻转轮播效果,不需要 JS 控制翻转动画本身,但需要 JS 来管理“当前页”和触发 class 切换。核心是 transform-style: preserve-3d 和 rotateY 配合 transform-origin。
transform-origin: center),否则会偏移或缩放失真perspective(比如 1000px),否则 3D 效果扁平无纵深感position: absolute 叠在一起,否则翻转时会挤占布局流transform: rotateY(180deg),正向 0 → 180,反向 180 → 0,配合 transition: transform 0.6s ease-in-out
第一页
第二页
只改 class 不够——CSS 中 .active 和 :not(.active) 的 transform 值必须互为 0deg / 180deg,且要确保每次切换前「上一个 active 元素」已退出、下一个才入场,否则会出现两个同时翻转或卡住。
.active,再给目标加,避免多个 active 并存
getBoundingClientRect() 或 offsetParent 检查元素是否已渲染,防止首次加载时 JS 找不到 DOMtouchstart/touchend 判断滑动方向,单纯监听 click 在 iOS 上可能延迟或失效这是最常被忽略的兼容性问题:不加 backface-visibility: hidden,翻转到背面时 Chrome 可能直接丢弃渲染,导致“闪一下就没了”。Safari 和 Firefox 表现稍好,但统一加上更稳妥。
.item 单独设置 backface-visibility: hidden
-webkit-backface-visibility: hidden(旧版 Safari)transform: translateZ(0) 强制 GPU 加速翻转动画卡顿往往不是因为时间设太短,而是浏览器没走 GPU 合成层。即使写了 transform,若元素有其他触发重排的属性(如 width、margin 动态变化),仍会退回到 CPU 渲染。
transform 和 opacity,避免修改 left/top 或 display
.item 加 will-change: transform(仅在动画触发前加,结束后移除,避免内存泄漏)