3D 圆环组件(CSS 分段圆环/甜甜圈,段数/管径/半径可调)

CSSJS 许可:自研原创

3D 圆环组件:纯 CSS preserve-3d 用 12-48 个胶囊段围成圆环,弦长公式自动计算段宽消除缝隙,段数、管径、环半径、旋转速度实时可调,JS 仅负责生成,零依赖。

效果演示(真实可交互)

完整代码

圆环由 N 个胶囊形分段围成:每个分段 rotateY(i × 360°/N) 展开到对应角度,再 translateZ(环半径) 推到环面上。分段宽度不是随意取值,而是用弦长公式 2 × R × sin(π/N) 计算并放大 5%,使相邻分段恰好首尾相接、不留缝隙;分段高度即管径,圆角拉满后呈现甜甜圈质感。

<div class="scene">
  <div class="tilt"><div class="torus" id="torus"></div></div>
</div>
.scene { height: 400px; perspective: 950px; display: flex; align-items: center; justify-content: center; }
.tilt { transform: rotateX(16deg); transform-style: preserve-3d; }   /* 整体俯视角 */
.torus {
  position: relative; width: 0; height: 0;
  transform-style: preserve-3d;
  animation: spin 12s linear infinite;
}
@keyframes spin { to { transform: rotateY(360deg); } }
// N 个分段围成圆环:弦长公式保证无缝
function build(n, R, tube) {
  const angle = 360 / n;
  const chord = 2 * R * Math.sin(Math.PI / n) * 1.05;   // 弦长 × 1.05
  torus.innerHTML = '';
  for (let i = 0; i < n; i++) {
    const s = document.createElement('div');
    s.style.cssText = `position:absolute;width:${chord}px;height:${tube}px;
      margin-left:${-chord / 2}px;margin-top:${-tube / 2}px;border-radius:999px;
      background:linear-gradient(180deg,hsl(${i * 360 / n},78%,66%),hsl(${(i * 360 / n + 30) % 360},78%,52%));
      transform:rotateY(${i * angle}deg) translateZ(${R}px);`;
    torus.appendChild(s);
  }
}
build(28, 150, 36);

参数说明

参数位置说明
段数n12-48 段,越多越圆滑,演示中实时可调
环半径R圆心到管心的距离,演示中 110-200px 可调
管径tube分段高度,即圆环的粗细
段宽chord 公式弦长 × 1.05,保证段间无缝
旋转速度animation: spin 12s演示中 4-30s 可调

兼容性与性能

常见问题

Q: 段与段之间出现裂缝或重叠? 裂缝说明弦长算小了,重叠说明算大了。chord = 2R·sin(π/n) 是理论值,实际乘以 1.02-1.08 即可消除缝隙;段数越多、弦长越短,放大系数可以越小。

Q: 为什么圆环「不圆」、看起来像多边形? 段数太少所致。12 段以下会明显看到棱角;建议 24 段以上,配合圆角拉满的胶囊造型,观感即接近光滑圆环。

Q: 想让圆环竖起来或倾斜更多角度? 调整包裹层 .tilt 的 rotateX 即可整体改变观察角度;若需更复杂的姿态,可在 .tilt 上叠加 rotateZ。

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(缓动曲线)等属性即可,代码中有注释说明。

✍️ 作者与审核