پیش‌نمایش زنده
کد HTML
<div class="loader-container">
  <div class="area"></div>
  <div class="area"></div>
  <div class="area"></div>
  <div class="area"></div>
  <div class="area"></div>
  <div class="area"></div>
  <div class="area"></div>
  <div class="area"></div>
  <div class="area"></div>
  <div class="area"></div>
  <div class="area"></div>
  <div class="area"></div>
  <div class="area"></div>
  <div class="area"></div>
  <div class="area"></div>
  <div class="area"></div>
  <div class="area"></div>
  <div class="area"></div>
  <div class="area"></div>
  <div class="area"></div>
  <div class="area"></div>
  <div class="area"></div>
  <div class="area"></div>
  <div class="area"></div>
  <div class="area"></div>
  <div class="area"></div>
  <div class="area"></div>
  <div class="area"></div>
  <div class="area"></div>
  <div class="area"></div>
  <div class="area"></div>
  <div class="area"></div>
  <div class="area"></div>
  <div class="area"></div>
  <div class="area"></div>
  <div class="area"></div>
  <button class="btn">Reload</button>
  <div class="loader">
    <p class="text">LOADING...</p>
    <span style="--i: 100; --d: 0;"></span>
    <div class="groove">
      <span style="--i: 50; --d: 100;"></span>
      <span style="--i: 30; --d: 150;"></span>
      <span style="--i: 50; --d: 180;"></span>
    </div>
    <span style="--i: 10; --d: 230;"></span>
    <div class="groove">
      <span style="--i: 100; --d: 240;"></span>
      <span style="--i: 15; --d: 340;"></span>
      <span style="--i: 140; --d: 355;"></span>
    </div>
    <span style="--i: 60; --d: 495;"></span>
    <div class="groove">
      <span style="--i: 60; --d: 555;"></span>
      <span style="--i: 50; --d: 615;"></span>
      <span style="--i: 20; --d: 665;"></span>
    </div>
    <span style="--i: 40; --d: 685;"></span>
  </div>
</div>
کد CSS
.loader-container {
  --color-primary: seagreen;
  --color-neutral: #fff;
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  position: relative;
  width: 100%;
  height: 100%;
}

.area {
  &:nth-of-type(1):hover ~ .loader {
    transform: rotateX(-20deg) rotateY(20deg);
  }

  &:nth-of-type(2):hover ~ .loader {
    transform: rotateX(-20deg) rotateY(10deg);
  }

  &:nth-of-type(3):hover ~ .loader {
    transform: rotateX(-20deg) rotateY(5deg);
  }

  &:nth-of-type(4):hover ~ .loader {
    transform: rotateX(-20deg) rotateY(-5deg);
  }

  &:nth-of-type(5):hover ~ .loader {
    transform: rotateX(-20deg) rotateY(-10deg);
  }

  &:nth-of-type(6):hover ~ .loader {
    transform: rotateX(-20deg) rotateY(-20deg);
  }

  &:nth-of-type(7):hover ~ .loader {
    transform: rotateX(-10deg) rotateY(20deg);
  }

  &:nth-of-type(8):hover ~ .loader {
    transform: rotateX(-10deg) rotateY(10deg);
  }

  &:nth-of-type(9):hover ~ .loader {
    transform: rotateX(-10deg) rotateY(5deg);
  }

  &:nth-of-type(10):hover ~ .loader {
    transform: rotateX(-10deg) rotateY(-5deg);
  }

  &:nth-of-type(11):hover ~ .loader {
    transform: rotateX(-10deg) rotateY(-10deg);
  }

  &:nth-of-type(12):hover ~ .loader {
    transform: rotateX(-10deg) rotateY(-20deg);
  }

  &:nth-of-type(13):hover ~ .loader {
    transform: rotateX(-5deg) rotateY(20deg);
  }

  &:nth-of-type(14):hover ~ .loader {
    transform: rotateX(-5deg) rotateY(10deg);
  }

  &:nth-of-type(15):hover ~ .loader {
    transform: rotateX(-5deg) rotateY(5deg);
  }

  &:nth-of-type(16):hover ~ .loader {
    transform: rotateX(-5deg) rotateY(-5deg);
  }

  &:nth-of-type(17):hover ~ .loader {
    transform: rotateX(-5deg) rotateY(-10deg);
  }

  &:nth-of-type(18):hover ~ .loader {
    transform: rotateX(-5deg) rotateY(-20deg);
  }

  &:nth-of-type(19):hover ~ .loader {
    transform: rotateX(5deg) rotateY(20deg);
  }

  &:nth-of-type(20):hover ~ .loader {
    transform: rotateX(5deg) rotateY(10deg);
  }

  &:nth-of-type(21):hover ~ .loader {
    transform: rotateX(5deg) rotateY(5deg);
  }

  &:nth-of-type(22):hover ~ .loader {
    transform: rotateX(5deg) rotateY(-5deg);
  }

  &:nth-of-type(23):hover ~ .loader {
    transform: rotateX(5deg) rotateY(-10deg);
  }

  &:nth-of-type(24):hover ~ .loader {
    transform: rotateX(5deg) rotateY(-20deg);
  }

  &:nth-of-type(25):hover ~ .loader {
    transform: rotateX(10deg) rotateY(20deg);
  }

  &:nth-of-type(26):hover ~ .loader {
    transform: rotateX(10deg) rotateY(10deg);
  }

  &:nth-of-type(27):hover ~ .loader {
    transform: rotateX(10deg) rotateY(5deg);
  }

  &:nth-of-type(28):hover ~ .loader {
    transform: rotateX(10deg) rotateY(-5deg);
  }

  &:nth-of-type(29):hover ~ .loader {
    transform: rotateX(10deg) rotateY(-10deg);
  }

  &:nth-of-type(30):hover ~ .loader {
    transform: rotateX(10deg) rotateY(-20deg);
  }

  &:nth-of-type(31):hover ~ .loader {
    transform: rotateX(20deg) rotateY(20deg);
  }

  &:nth-of-type(32):hover ~ .loader {
    transform: rotateX(20deg) rotateY(10deg);
  }

  &:nth-of-type(33):hover ~ .loader {
    transform: rotateX(20deg) rotateY(5deg);
  }

  &:nth-of-type(34):hover ~ .loader {
    transform: rotateX(20deg) rotateY(-5deg);
  }

  &:nth-of-type(35):hover ~ .loader {
    transform: rotateX(20deg) rotateY(-10deg);
  }

  &:nth-of-type(36):hover ~ .loader {
    transform: rotateX(20deg) rotateY(-20deg);
  }
}

.loader {
  display: flex;
  position: absolute;
  top: 50%;
  left: 50%;
  transform-style: preserve-3d;
  transition: all 0.15s linear;
  translate: -50% -50%;

  & span {
    position: relative;
    height: 30px;
    background-color: var(--color-neutral);
    border-top: 0.2rem solid var(--color-primary);
    border-bottom: 0.2rem solid var(--color-primary);

    &::before {
      content: "";
      position: absolute;
      top: 0.2rem;
      width: 100%;
      height: calc(100% - 0.4rem);
      background-color: var(--color-primary);
      clip-path: inset(0 100% 0 0);
      animation: progress calc(var(--i) * 10ms) linear calc(var(--d) * 10ms)
        forwards;
    }
  }

  & > span {
    &:nth-of-type(1) {
      width: 100px;
      border-left: 0.2rem solid var(--color-primary);
      border-radius: 10px 0 0 10px;

      &::before {
        left: 0.2rem;
        width: calc(100% - 0.2rem + 1px);
        border-radius: 5px 0 0 5px;
      }
    }

    &:nth-of-type(2) {
      width: 10px;

      &::before {
        left: -1px;
        width: calc(100% + 2px);
      }
    }

    &:nth-of-type(3) {
      width: 50px;
      transform: translateZ(40px);

      &::before {
        left: -1px;
        width: calc(100% + 2px);
      }
    }

    &:nth-of-type(4) {
      width: 40px;
      border-right: 0.2rem solid var(--color-primary);
      border-radius: 0 10px 10px 0;

      &::before {
        right: 0.2rem;
        width: calc(100% - 0.2rem + 1px);
        border-radius: 0 5px 5px 0;
      }
    }
  }
}

.text {
  position: absolute;
  top: -60%;
  left: 10px;
  color: var(--color-primary);
  font-weight: 900;
  transform: translateZ(-20px);
}

.groove {
  position: relative;
  transform-style: preserve-3d;

  & > span {
    display: inline-block;
  }

  & > :first-child,
  & > :last-child {
    position: absolute;
  }

  &:nth-of-type(1) {
    & > :nth-child(1) {
      width: 50px;
      transform: rotateY(90deg);
      transform-origin: left;
    }

    & > :nth-child(2) {
      width: 30px;
      transform: translateZ(-50px);
    }

    & > :nth-child(3) {
      width: 50px;
      transform: rotateY(-90deg) translateX(-50px);
      transform-origin: left;
    }
  }

  &:nth-of-type(2) {
    & > :nth-child(1) {
      width: 100px;
      transform: rotateY(90deg);
      transform-origin: left;
    }

    & > :nth-child(2) {
      width: 15px;
      transform: translateZ(-100px);
    }

    & > :nth-child(3) {
      width: 140px;
      transform: rotateY(-90deg) translateX(-100px);
      transform-origin: left;
    }
  }

  &:nth-of-type(3) {
    & > :nth-child(1) {
      width: 60px;
      transform: rotateY(90deg) translateX(-40px);
      transform-origin: left;
    }

    & > :nth-child(2) {
      width: 30px;
      transform: translateZ(-20px);
    }

    & > :nth-child(3) {
      width: 20px;
      transform: rotateY(-90deg) translateX(-20px);
      transform-origin: left;
    }
  }
}

.btn {
  position: absolute;
  top: calc(50% + 5rem);
  left: 50%;
  padding: 0.5rem;
  border: 5px solid var(--color-primary);
  border-radius: 10px;
  background: linear-gradient(var(--color-primary), var(--color-primary)) 0 0 /
    100% 0 no-repeat;
  color: var(--color-primary);
  font-weight: 900;
  transition: all 0.1s ease-in-out;
  transform: translate(-50%, -50%);
  cursor: pointer;

  &:hover {
    background-size: 100% 100%;
    color: var(--color-neutral);
  }

  &:active {
    font-size: 0.7em;

    & ~ .loader span::before {
      display: none;
    }
  }
}

@keyframes progress {
  to {
    clip-path: inset(0 0 0 0);
  }
}
نوع: loader
تاریخ ایجاد: 2026/06/06
آخرین بروزرسانی: 2026/06/06