3D 金字塔组件(CSS 四棱锥旋转特效,线框/尺寸/轴向可调)
3D 金字塔组件:纯 CSS preserve-3d 构建四棱锥,SVG 三角面 + 底面 + 发光顶点,支持线框模式、尺寸缩放、单轴/双轴旋转与速度调节,零 JS 依赖零图片。
效果演示(真实可交互)
完整代码
构建四棱锥的关键:四个等腰三角面分别 rotateY(0°/90°/180°/270°) 展开到四个方向,再 translateZ(110px) 推到底面边缘,最后绕底边 rotateX(-35.4°) 向内倾斜——倾斜角由 sinθ = 半底边 ÷ 三角高 算出,使四个顶点恰好汇聚于中心正上方。底面用 rotateX(90deg) 平放补齐,顶点加发光圆点收尾。
<div class="scene">
<div class="pyr">
<div class="base"></div>
<div class="face" style="--i:0"><svg viewBox="0 0 200 190"><polygon points="100,0 0,190 200,190"/></svg></div>
<div class="face" style="--i:1"><svg viewBox="0 0 200 190"><polygon points="100,0 0,190 200,190"/></svg></div>
<div class="face" style="--i:2"><svg viewBox="0 0 200 190"><polygon points="100,0 0,190 200,190"/></svg></div>
<div class="face" style="--i:3"><svg viewBox="0 0 200 190"><polygon points="100,0 0,190 200,190"/></svg></div>
<div class="apex"></div>
</div>
</div>
.scene { height: 400px; perspective: 900px; display: flex; align-items: center; justify-content: center; }
.pyr {
position: relative; width: 0; height: 0;
transform-style: preserve-3d;
animation: spin 12s linear infinite;
}
.base {
position: absolute; left: -110px; top: -110px;
width: 220px; height: 220px; border-radius: 8px;
border: 2px solid rgba(160, 180, 255, .55);
transform: rotateX(90deg); /* 平放成底面 */
}
.face {
position: absolute; left: 50%; top: 50%;
width: 200px; height: 190px;
margin-left: -100px; margin-top: -190px; /* 底边中点对齐圆心 */
transform-origin: 50% 100%; /* 绕底边旋转 */
transform: rotateY(calc(var(--i) * 90deg)) translateZ(110px) rotateX(-35.4deg);
backface-visibility: hidden;
}
.face polygon { fill: rgba(108, 140, 255, .62); stroke: rgba(255, 255, 255, .45); stroke-width: 2; }
@keyframes spin { to { transform: rotateY(360deg); } }
线框模式只需把 polygon 的 fill 改为透明、stroke 改为霓虹色,即可呈现科技感线框金字塔(演示组件已内置该开关)。
参数说明
| 参数 | 位置 | 说明 |
|---|---|---|
| 倾斜角 | rotateX(-35.4deg) | 由 asin(110/190) 算出,改尺寸需同步重算 |
| 旋转速度 | animation: spin 12s | 演示中 4-30s 可调 |
| 旋转轴 | @keyframes | 仅 Y 为环绕,X+Y 为翻滚 |
| 尺寸 | scale 包裹层 | 演示中 60-140% 可调 |
| 线框模式 | .pyr--wire 类 | fill 透明 + 霓虹描边 |
兼容性与性能
- 仅 6 个元素(4 面 + 1 底 + 1 顶点),GPU 合成开销极低
- 使用 SVG polygon 而非 clip-path 绘制三角面,描边可随 fill 开关自由切换,且无裁剪锯齿
- Chrome / Safari / Firefox / Edge 全支持;iOS Safari 保留
-webkit-transform-style: preserve-3d - 面与面之间的接缝是透视投影的自然结果,属于正常视觉现象
- 不支持的旧浏览器中退化为重叠的半透明三角形平铺,内容不丢失
常见问题
Q: 四个三角面没有汇聚成一个顶点? 倾斜角必须满足 sinθ = 半底边 ÷ 三角面高。改动了底边或三角面尺寸后,务必按公式重算 rotateX 角度,否则顶点会散开或交叉。
Q: 为什么面之间有缝隙? 半透明面的边缘在透视下会有轻微透光缝隙,属正常现象。可略微加大三角面尺寸(如宽度 204px)让面轻微交叠,缝隙即消失。
Q: 想做成三棱锥(四面体)怎么改? 把底面去掉,四个三角面改用 rotateY(0°/120°/240°) 配合各自的空间倾斜角即可;四面体每个面都是等边三角形,数学上更对称。
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(缓动曲线)等属性即可,代码中有注释说明。