پیش‌نمایش زنده
کد HTML
<div class="loader">
  <div class="grid-background"></div>
  <div class="ring outer">
    <div class="item item-1"><span class="symbol">∫</span></div>
    <div class="item item-2"><span class="symbol">∑</span></div>
    <div class="item item-3"><span class="symbol">∂</span></div>
  </div>
  <div class="ring middle">
    <div class="item item-1"><span class="symbol">π</span></div>
    <div class="item item-2"><span class="symbol">e</span></div>
  </div>
  <div class="ring inner">
    <div class="item item-1"><span class="symbol">∞</span></div>
    <div class="item item-2"><span class="symbol">√</span></div>
  </div>
  <div class="core"></div>
</div>
کد CSS
.loader * {
  box-sizing: border-box;
}

.loader {
  position: relative;
  width: 150px;
  height: 150px;
  display: flex;
  justify-content: center;
  align-items: center;
  overflow: hidden;
  border-radius: 50%;
  box-shadow:
    0 0 0 1px rgba(255, 255, 255, 0.1),
    0 0 20px rgba(0, 0, 0, 1);
}

.ring {
  position: absolute;
  border-radius: 50%;
  box-shadow: inset 0 0 20px rgba(0, 0, 0, 0.5);
  display: flex;
  justify-content: center;
  align-items: center;
  backdrop-filter: blur(2px);
  transform-style: preserve-3d;
}

.ring::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: 50%;
  border: 1px solid rgba(255, 255, 255, 0.1);
  z-index: 1;
}

.outer {
  width: 140px;
  height: 140px;
  z-index: 10;
  animation: spin 12s linear infinite;
}

.outer::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: 50%;
  border: 1px solid transparent;
  border-top-color: rgba(34, 211, 238, 0.8);
  border-right-color: rgba(34, 211, 238, 0.2);
  box-shadow: 0 0 15px rgba(34, 211, 238, 0.4);
  z-index: 2;
  pointer-events: none;
}

.middle {
  width: 100px;
  height: 100px;
  z-index: 20;
  animation: spin 8s linear infinite reverse;
}

.middle::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: 50%;
  border: 1px solid transparent;
  border-left-color: rgba(168, 85, 247, 0.8);
  border-bottom-color: rgba(168, 85, 247, 0.2);
  box-shadow: 0 0 15px rgba(168, 85, 247, 0.4);
  z-index: 2;
  pointer-events: none;
}

.inner {
  width: 60px;
  height: 60px;
  z-index: 30;
  animation: spin 4s linear infinite;
  background: radial-gradient(
    circle,
    rgba(255, 255, 255, 0.05) 0%,
    transparent 60%
  );
}

.inner::before {
  border: 1px dashed rgba(255, 255, 255, 0.3);
}

.item {
  position: absolute;
  top: 50%;
  left: 50%;
  transform-origin: 0 0;
  z-index: 5;
}

.symbol {
  display: block;
  color: #fff;
  font-size: 1.2rem;
  font-weight: 400;
  text-shadow: 0 0 8px rgba(255, 255, 255, 0.5);
}

.outer .item-1 {
  transform: rotate(0deg) translate(0, -70px);
}

.outer .item-2 {
  transform: rotate(120deg) translate(0, -70px);
}

.outer .item-3 {
  transform: rotate(240deg) translate(0, -70px);
}

.middle .item-1 {
  transform: rotate(0deg) translate(0, -50px);
}

.middle .item-2 {
  transform: rotate(180deg) translate(0, -50px);
}

.inner .item-1 {
  transform: rotate(90deg) translate(0, -30px);
}

.inner .item-2 {
  transform: rotate(270deg) translate(0, -30px);
}

@keyframes spin-reverse-0 {
  from {
    transform: rotate(0deg);
  }

  to {
    transform: rotate(-360deg);
  }
}

@keyframes spin-reverse-120 {
  from {
    transform: rotate(-120deg);
  }

  to {
    transform: rotate(-480deg);
  }
}

@keyframes spin-reverse-240 {
  from {
    transform: rotate(-240deg);
  }

  to {
    transform: rotate(-600deg);
  }
}

.outer .item-1 .symbol {
  animation: spin-reverse-0 12s linear infinite;
}

.outer .item-2 .symbol {
  animation: spin-reverse-120 12s linear infinite;
}

.outer .item-3 .symbol {
  animation: spin-reverse-240 12s linear infinite;
}

@keyframes spin-forward-0 {
  from {
    transform: rotate(0deg);
  }

  to {
    transform: rotate(360deg);
  }
}

@keyframes spin-forward-180 {
  from {
    transform: rotate(-180deg);
  }

  to {
    transform: rotate(180deg);
  }
}

.middle .item-1 .symbol {
  animation: spin-forward-0 8s linear infinite;
}

.middle .item-2 .symbol {
  animation: spin-forward-180 8s linear infinite;
}

@keyframes spin-reverse-90 {
  from {
    transform: rotate(-90deg);
  }

  to {
    transform: rotate(-450deg);
  }
}

@keyframes spin-reverse-270 {
  from {
    transform: rotate(-270deg);
  }

  to {
    transform: rotate(-630deg);
  }
}

.inner .item-1 .symbol {
  animation: spin-reverse-90 4s linear infinite;
}

.inner .item-2 .symbol {
  animation: spin-reverse-270 4s linear infinite;
}

.core {
  position: absolute;
  width: 8px;
  height: 8px;
  background: #fff;
  border-radius: 50%;
  box-shadow:
    0 0 5px #fff,
    0 0 15px #22d3ee,
    0 0 30px #a855f7;
  z-index: 10;
  animation: heartbeat-core 4s ease-in-out infinite;
}
@keyframes spin {
  to {
    transform: rotate(360deg);
  }
}

@keyframes heartbeat-core {
  0% {
    transform: scale(1);
    opacity: 0.8;
  }

  5% {
    transform: scale(1.1);
    opacity: 0.9;
  }

  10% {
    transform: scale(1);
    opacity: 0.8;
  }

  15% {
    transform: scale(1.4);
    opacity: 1;
    box-shadow:
      0 0 10px #fff,
      0 0 25px #22d3ee;
  }

  20% {
    transform: scale(1);
    opacity: 0.8;
  }

  25% {
    transform: scale(1);
    opacity: 0.8;
  }

  30% {
    transform: scale(1.1);
    opacity: 0.9;
  }

  35% {
    transform: scale(1);
    opacity: 0.8;
  }

  40% {
    transform: scale(1.4);
    opacity: 1;
    box-shadow:
      0 0 10px #fff,
      0 0 25px #22d3ee;
  }

  45% {
    transform: scale(1);
    opacity: 0.8;
  }

  50% {
    transform: scale(1);
    opacity: 0.8;
  }

  55% {
    transform: scale(1.1);
    opacity: 0.9;
  }

  60% {
    transform: scale(1);
    opacity: 0.8;
  }

  65% {
    transform: scale(1.4);
    opacity: 1;
    box-shadow:
      0 0 10px #fff,
      0 0 25px #22d3ee;
  }

  70% {
    transform: scale(1);
    opacity: 0.8;
  }

  75% {
    transform: scale(1);
    opacity: 0.8;
  }

  80% {
    transform: scale(0.9);
    opacity: 0.6;
  }

  82% {
    transform: scale(1.3);
    opacity: 0.9;
  }

  84% {
    transform: scale(0.9);
    opacity: 0.6;
  }

  86% {
    transform: scale(1.7);
    opacity: 1;
    box-shadow:
      0 0 15px #fff,
      0 0 40px #a855f7;
  }

  90% {
    transform: scale(1);
    opacity: 0.8;
  }

  100% {
    transform: scale(1);
    opacity: 0.8;
  }
}

@keyframes grid-move {
  0% {
    background-position:
      center center,
      0 0,
      0 0;
  }

  100% {
    background-position:
      center center,
      0 30px,
      0 30px;
  }
}
نوع: loader
تاریخ ایجاد: 2026/06/06
آخرین بروزرسانی: 2026/06/06