3D 立方体旋转特效(纯 CSS,速度/尺寸/旋转轴实时可调)
3D 立方体旋转特效:纯 CSS preserve-3d 实现六面彩色立方体,速度、尺寸、旋转轴实时可调,支持单轴/双轴旋转与暂停,零 JS 依赖零图片。
效果演示(真实可交互)
前
后
右
左
上
下
完整代码
<div class="scene">
<div class="cube">
<div class="face front">前</div>
<div class="face back">后</div>
<div class="face right">右</div>
<div class="face left">左</div>
<div class="face top">上</div>
<div class="face bottom">下</div>
</div>
</div>
.scene {
width: 200px;
height: 200px;
perspective: 800px; /* 视距越近 3D 感越强 */
}
.cube {
position: relative;
width: 100%;
height: 100%;
transform-style: preserve-3d;
animation: spin 10s linear infinite;
}
.face {
position: absolute;
inset: 0;
display: flex;
align-items: center;
justify-content: center;
border: 2px solid rgba(255,255,255,.35);
color: #fff;
backface-visibility: hidden;
}
.front { background: #6c8cff; transform: rotateY(0deg) translateZ(100px); }
.back { background: #ff8ecf; transform: rotateY(180deg) translateZ(100px); }
.right { background: #4be3ac; transform: rotateY(90deg) translateZ(100px); }
.left { background: #ffc145; transform: rotateY(-90deg) translateZ(100px); }
.top { background: #a96cff; transform: rotateX(90deg) translateZ(100px); }
.bottom { background: #ff5f6d; transform: rotateX(-90deg) translateZ(100px); }
@keyframes spin {
from { transform: rotateX(0deg) rotateY(0deg); }
to { transform: rotateX(360deg) rotateY(360deg); }
}
关键三要素:perspective(视距)、transform-style: preserve-3d(子元素保持 3D 空间)、translateZ(边长/2)(把每个面推到立方体表面)。
参数说明
| 参数 | 位置 | 说明 |
|---|---|---|
| 旋转速度 | animation: spin 10s | 周期越短转得越快 |
| 尺寸 | width/height + translateZ | 边长与面偏移必须同步,偏移 = 边长一半 |
| 旋转轴 | @keyframes spin | 单轴只写 rotateX 或 rotateY,双轴组合写 |
| 视距 | perspective: 800px | 300-1200px,越小透视越夸张 |
| 暂停 | animation-play-state: paused | 无障碍/截图场景可暂停 |
兼容性与性能
- 纯 CSS 3D,无 JS、无图片、无字体请求,一个文件即完整组件
transform动画由 GPU 合成器负责,六面立方体持续旋转的 CPU 开销可忽略- Chrome / Safari / Firefox / Edge 全支持;iOS Safari 需前缀
-webkit-transform-style: preserve-3d(演示已含兼容写法) - 不支持的旧浏览器中立方体退化为「扁平六色块」平铺,内容不丢失(优雅降级)
常见问题
Q: 面与面之间有缝隙或重叠怎么办? 几乎都是 translateZ 与边长不匹配导致的。记住公式:translateZ = 边长 / 2,且所有面的 width/height 必须一致;改用 inset: 0 让面自动继承父级尺寸可避免手填尺寸出错。
Q: 想让立方体里面显示内容(如相册)怎么做? 去掉 backface-visibility: hidden,把图片放在各面即可实现「内窥」效果;如需半透明外壳,给面加 rgba() 背景与 opacity。
Q: 移动端卡顿怎么办? 降低旋转频率(如 20s 一圈),并避免在立方体外层叠加 filter/box-shadow 等触发重绘的属性;若仍卡顿,可缩小立方体尺寸减少像素覆盖。
Q: 可以商用吗? 可以。本组件为粤喵自研原创代码,免费商用无需署名,可自由改色改速。
许可与来源
- 许可证:自研原创 —— 粤喵自研原创,可免费用于个人与商业项目,无需署名。查看来源公示与许可清单
- 来源:粤喵团队原创自研(从效果思路到代码实现均为独立完成,未直接复制第三方代码)
- 首次发布: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(缓动曲线)等属性即可,代码中有注释说明。