Skip to content

原子轨道 Atom

模拟原子结构的加载动画,中心原子核外有多个电子在不同倾斜角度的轨道上旋转,科技感十足。

实时预览

代码

css
.atom {
  position: relative;
  width: 100px;
  height: 100px;
}

.nucleus {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 14px;
  height: 14px;
  margin: -7px 0 0 -7px;
  background: radial-gradient(circle, #40b883, #1a7a52);
  border-radius: 50%;
  box-shadow: 0 0 12px rgba(64, 184, 131, 0.6);
  z-index: 2;
}

.orbit {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 90px;
  height: 34px;
  margin: -17px 0 0 -45px;
  border: 1.5px solid rgba(64, 184, 131, 0.2);
  border-radius: 50%;
}

.orbit-1 { animation: orbit-spin-1 2s linear infinite; }
.orbit-2 { animation: orbit-spin-2 2.2s linear infinite; }
.orbit-3 { animation: orbit-spin-3 2.4s linear infinite; }

.electron {
  position: absolute;
  top: -4px;
  left: 50%;
  margin-left: -4px;
  width: 8px;
  height: 8px;
  background: #40b883;
  border-radius: 50%;
  box-shadow: 0 0 8px rgba(64, 184, 131, 0.8);
}

@keyframes orbit-spin-1 {
  from { transform: rotateX(65deg) rotateZ(0deg); }
  to   { transform: rotateX(65deg) rotateZ(360deg); }
}

@keyframes orbit-spin-2 {
  from { transform: rotateX(65deg) rotateZ(120deg); }
  to   { transform: rotateX(65deg) rotateZ(480deg); }
}

@keyframes orbit-spin-3 {
  from { transform: rotateX(65deg) rotateZ(240deg); }
  to   { transform: rotateX(65deg) rotateZ(600deg); }
}
html
<div class="atom">
  <div class="nucleus"></div>
  <div class="orbit orbit-1"><div class="electron"></div></div>
  <div class="orbit orbit-2"><div class="electron"></div></div>
  <div class="orbit orbit-3"><div class="electron"></div></div>
</div>

纯 CSS 实现的原子轨道加载动画——通过 @keyframesanimation 属性创建循环播放的加载指示器。比 GIF 体积更小、缩放不失真,完全不需要 JavaScript。

快速使用

  1. 复制 CSS 代码到你的样式文件(含 @keyframes 定义)
  2. 在需要显示加载状态的位置添加 HTML 结构
  3. 调整 width/height 控制大小,animation-duration 控制速度
  4. 数据加载完成后移除 loading 元素,释放 GPU 资源

使用场景

  • 页面初始加载:在 SPA 或内容较重的页面中,用骨架屏或旋转动画代替白屏等待
  • 数据请求等待:按钮提交后显示加载状态,防止重复点击
  • 文件上传/下载:配合进度条或环形进度指示操作进度
  • 无限滚动加载更多:页面底部显示加载指示器,告知用户内容正在加载

常见问题

Q: Loading 动画什么时候需要停止? A: 数据加载完成后,通过 JavaScript 移除动画元素的 class 或直接移除 DOM 元素。可以给元素加 animation: none 立即停止动画,释放 GPU 资源。

Q: 多个 Loading 元素会互相影响吗? A: 不会。每个 CSS animation 相互独立。但如果页面同时有 20+ 个动画元素,移动端可能出现卡顿。建议一个页面只保留 1-2 个主 loading 指示器。

Q: 如何让 Loading 动画适应不同尺寸? A: 所有尺寸用相对单位或无单位值。建议用 CSS 自定义属性(如 --loader-size: 48px)统一控制,方便全局调整。

浏览器兼容性

本效果使用标准 CSS 属性,所有现代浏览器(Chrome、Firefox、Safari、Edge)均完全支持。

浏览器兼容性
Chrome / Edge✅ 完全支持
Firefox✅ 完全支持
Safari✅ 完全支持
移动端浏览器✅ 完全支持
IE 11⚠️ 部分 @keyframes / animation 需要 -ms- 前缀

使用说明

属性说明
rotateX(65deg)控制轨道的倾斜角度,模拟 3D 透视效果
rotateZ 偏移每个轨道初始角度不同(0°/120°/240°)
animation-duration不同轨道使用不同速度,增强真实感
box-shadow为电子和原子核添加发光效果
orbit 尺寸宽高比越小轨道越扁,椭圆越明显