پیش‌نمایش زنده
کد HTML
<div class="btn-wrapper">
  <input id="capture-toggle" class="btn-cbox" type="checkbox" />
  <label for="capture-toggle" class="btn">
    <span class="letter">C</span>
    <span class="letter">a</span>
    <span class="letter">p</span>
    <span class="letter">t</span>
    <span class="letter">u</span>
    <span class="letter">r</span>
    <span class="letter">e</span>
    <div class="shutter-wrapper">
      <span class="shutter s-1"></span>
      <span class="shutter s-2"></span>
      <span class="shutter s-3"></span>
      <span class="shutter s-4"></span>
      <span class="shutter s-5"></span>
      <span class="shutter s-6"></span>
    </div>
  </label>
  <div class="flash"></div>
  <div class="message">
    <span class="warning">Warning</span>
    | Flashing lights
  </div>
</div>
کد CSS
.btn-wrapper {
  position: relative;
  display: flex;
  justify-content: space-between;
  align-items: center;
  flex-direction: column;
  user-select: none;
  filter: drop-shadow(0 4px 4px #0005);
}

.btn-wrapper .message {
  position: absolute;
  bottom: 20px;
  font-family: "Inter", sans-serif;
  font-weight: 200;
  font-size: 12px;
  letter-spacing: 0.05em;
  color: #fff4;
  filter: drop-shadow(0 -6px 8px #fff);
  margin-top: 0rem;

  .warning {
    color: #fe06;
  }
}

.btn {
  --color-1: 200, 220, 250;
  --color-bg: 20, 0, 30;
  --color-fg: 230, 230, 230;

  --border-radius: 100px / 200px;
  --pad: 1px;

  cursor: pointer;

  font-size: 16px;
  font-family: "Inter", sans-serif;
  font-weight: 400;
  letter-spacing: 0.15em;
  color: rgba(var(--color-fg), 0.265);
  text-shadow: 0 0 2px rgba(var(--color-1), 0.5);
  text-transform: uppercase;

  position: relative;
  padding: 15px 40px;
  background: radial-gradient(circle at center, #0000 30%, #fff1 41%, #0000 43%),
    radial-gradient(circle at center, #0000 50%, #fff1 55%, #0000 60%),
    radial-gradient(circle at 75% 15%, #fff6 0.5%, #0000 2%),
    radial-gradient(circle at 78% 5%, #fff3 1%, #0000 10%),
    conic-gradient(
      from 135deg at 50% 50%,
      #0000,
      rgba(var(--color-1), 0.15),
      #0000,
      rgba(var(--color-1), 0.1),
      #0000
    ),
    radial-gradient(circle at center, #000 70%, #fff1),
    conic-gradient(
      from 85deg at 50% 40%,
      #0000,
      rgba(255, 0, 100, 1),
      #0000,
      rgba(var(--color-1), 0.5),
      #0000
    ),
    rgba(var(--color-bg), 0.5);
  border: none;
  border-radius: var(--border-radius);
  cursor: pointer;
  overflow: clip;
  overflow-clip-margin: var(--pad);
  margin: 3rem;

  transition:
    color 0.3s ease,
    border-radius 0.3s ease;

  display: inline-flex;
}

.btn::before {
  content: "";
  position: absolute;
  inset: calc(-1 * var(--pad));
  background: rgba(var(--color-1), 0.15);
  border-radius: calc(var(--border-radius) + var(--pad));
  z-index: -1;
}

.btn::after {
  content: "";
  position: absolute;

  width: 200%;
  height: 50%;
  top: 25%;
  left: -50%;

  background: rgba(255, 255, 255, 0.5)
    linear-gradient(to left, rgba(var(--color-1), 1), #fff9);
  border-radius: calc(var(--border-radius) + var(--pad));
  z-index: -1;
  filter: blur(4px) drop-shadow(0 -20px 20px rgba(var(--color-1), 0.75))
    drop-shadow(0 -10px 0 rgba(var(--color-1), 0.75));
  animation: rotate 3s linear infinite;
  opacity: 0;
  transition: opacity 0.3s ease;
}

.btn .letter {
  display: inline-block;
  position: relative;
  animation: letter-glow 1.7s ease infinite;
}
.btn .letter:nth-child(1) {
  animation-delay: 0.3s;
}
.btn .letter:nth-child(2) {
  animation-delay: 0.2s;
}
.btn .letter:nth-child(3) {
  animation-delay: 0.1s;
}
.btn .letter:nth-child(4) {
  animation-delay: 0s;
}
.btn .letter:nth-child(5) {
  animation-delay: 0.1s;
}
.btn .letter:nth-child(6) {
  animation-delay: 0.2s;
}
.btn .letter:nth-child(7) {
  animation-delay: 0.3s;
}
@keyframes letter-glow {
  50% {
    color: rgba(var(--color-fg), 1);
    background-position-y: 20px;
  }
}

.btn-cbox {
  position: absolute;
  inset: 0;
  opacity: 0;
  pointer-events: none;
}

.flash {
  position: absolute;
  inset: 0;
  border-radius: 30px / 100px;
  background: rgb(255, 255, 255);
  z-index: 2;
  opacity: 0;
  transition: opacity 0.3s ease;
  pointer-events: none;
}

.btn .shutter-wrapper {
  --angle: 120deg;

  position: absolute;
  inset: 0;
  display: flex;
  justify-content: center;
  align-items: center;
  z-index: 1;
  opacity: 0;
  transition:
    transform 0.3s ease,
    opacity 0.3s ease;
  transform: rotate(var(--angle));
}

.btn .shutter-wrapper .shutter {
  position: absolute;
  width: 100%;
  aspect-ratio: 1;
  align-self: center;
  left: 50%;
  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAMAAAAp4XiDAAAAUVBMVEWFhYWDg4N3d3dtbW17e3t1dXWBgYGHh4d5eXlzc3OLi4ubm5uVlZWPj4+NjY19fX2JiYl/f39ra2uRkZGZmZlpaWmXl5dvb29xcXGTk5NnZ2c8TV1mAAAAG3RSTlNAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAvEOwtAAAFVklEQVR4XpWWB67c2BUFb3g557T/hRo9/WUMZHlgr4Bg8Z4qQgQJlHI4A8SzFVrapvmTF9O7dmYRFZ60YiBhJRCgh1FYhiLAmdvX0CzTOpNE77ME0Zty/nWWzchDtiqrmQDeuv3powQ5ta2eN0FY0InkqDD73lT9c9lEzwUNqgFHs9VQce3TVClFCQrSTfOiYkVJQBmpbq2L6iZavPnAPcoU0dSw0SUTqz/GtrGuXfbyyBniKykOWQWGqwwMA7QiYAxi+IlPdqo+hYHnUt5ZPfnsHJyNiDtnpJyayNBkF6cWoYGAMY92U2hXHF/C1M8uP/ZtYdiuj26UdAdQQSXQErwSOMzt/XWRWAz5GuSBIkwG1H3FabJ2OsUOUhGC6tK4EMtJO0ttC6IBD3kM0ve0tJwMdSfjZo+EEISaeTr9P3wYrGjXqyC1krcKdhMpxEnt5JetoulscpyzhXN5FRpuPHvbeQaKxFAEB6EN+cYN6xD7RYGpXpNndMmZgM5Dcs3YSNFDHUo2LGfZuukSWyUYirJAdYbF3MfqEKmjM+I2EfhA94iG3L7uKrR+GdWD73ydlIB+6hgref1QTlmgmbM3/LeX5GI1Ux1RWpgxpLuZ2+I+IjzZ8wqE4nilvQdkUdfhzI5QDWy+kw5Wgg2pGpeEVeCCA7b85BO3F9DzxB3cdqvBzWcmzbyMiqhzuYqtHRVG2y4x+KOlnyqla8AoWWpuBoYRxzXrfKuILl6SfiWCbjxoZJUaCBj1CjH7GIaDbc9kqBY3W/Rgjda1iqQcOJu2WW+76pZC9QG7M00dffe9hNnseupFL53r8F7YHSwJWUKP2q+k7RdsxyOB11n0xtOvnW4irMMFNV4H0uqwS5ExsmP9AxbDTc9JwgneAT5vTiUSm1E7BSflSt3bfa1tv8Di3R8n3Af7MNWzs49hmauE2wP+ttrq+AsWpFG2awvsuOqbipWHgtuvuaAE+A1Z/7gC9hesnr+7wqCwG8c5yAg3AL1fm8T9AZtp/bbJGwl1pNrE7RuOX7PeMRUERVaPpEs+yqeoSmuOlokqw49pgomjLeh7icHNlG19yjs6XXOMedYm5xH2YxpV2tc0Ro2jJfxC50ApuxGob7lMsxfTbeUv07TyYxpeLucEH1gNd4IKH2LAg5TdVhlCafZvpskfncCfx8pOhJzd76bJWeYFnFciwcYfubRc12Ip/ppIhA1/mSZ/RxjFDrJC5xifFjJpY2Xl5zXdguFqYyTR1zSp1Y9p+tktDYYSNflcxI0iyO4TPBdlRcpeqjK/piF5bklq77VSEaA+z8qmJTFzIWiitbnzR794USKBUaT0NTEsVjZqLaFVqJoPN9ODG70IPbfBHKK+/q/AWR0tJzYHRULOa4MP+W/HfGadZUbfw177G7j/OGbIs8TahLyynl4X4RinF793Oz+BU0saXtUHrVBFT/DnA3ctNPoGbs4hRIjTok8i+algT1lTHi4SxFvONKNrgQFAq2/gFnWMXgwffgYMJpiKYkmW3tTg3ZQ9Jq+f8XN+A5eeUKHWvJWJ2sgJ1Sop+wwhqFVijqWaJhwtD8MNlSBeWNNWTa5Z5kPZw5+LbVT99wqTdx29lMUH4OIG/D86ruKEauBjvH5xy6um/Sfj7ei6UUVk4AIl3MyD4MSSTOFgSwsH/QJWaQ5as7ZcmgBZkzjjU1UrQ74ci1gWBCSGHtuV1H2mhSnO3Wp/3fEV5a+4wz//6qy8JxjZsmxxy5+4w9CDNJY09T072iKG0EnOS0arEYgXqYnXcYHwjTtUNAcMelOd4xpkoqiTYICWFq0JSiPfPDQdnt+4/wuqcXY47QILbgAAAABJRU5ErkJggg==),
    linear-gradient(to top, #000, 0%, #000, 50%, #666660);

  background-position:
    0px 0px,
    0 0;

  mask-image: radial-gradient(circle at -50% -20%, transparent 66%, white 66.3%),
    radial-gradient(circle at -50% 50%, transparent 90%, white 91%);
  mask-composite: subtract;
  mask-position:
    0px 0px,
    0px 100%;
  mask-size: 100% 100%;

  transition:
    mask-position 0.2s ease,
    mask-size 0.2s ease,
    transform 0.3s ease,
    opacity 0.3s ease;

  pointer-events: none;
  transform-origin: center left;
}
.btn .shutter.s-1 {
  z-index: 1;
  transform: rotate(0deg);
}
.btn .shutter.s-2 {
  z-index: 2;
  transform: rotate(60deg);
}
.btn .shutter.s-3 {
  z-index: 3;
  transform: rotate(120deg);
}
.btn .shutter.s-4 {
  z-index: 4;
  transform: rotate(180deg);
}
.btn .shutter.s-5 {
  z-index: 5;
  transform: rotate(240deg);
}
.btn .shutter.s-6 {
  z-index: 6;
  transform: rotate(300deg);
}

.btn:hover {
  .shutter-wrapper {
    opacity: 0.9;
    transform: rotate(calc(var(--angle) - 5deg));
  }
  .shutter {
    mask-position:
      -25px 0%,
      0% 100%;
  }
}

.btn-cbox:checked + .btn + .flash {
  opacity: 1;
  animation: flash 0.5s ease-out forwards;
  animation-delay: -0.15s;
}

.btn:active {
  .shutter-wrapper {
    opacity: 1;
    transform: rotate(calc(var(--angle) - 25deg));
  }
  .shutter {
    mask-position:
      -109px 0%,
      0% 100%;
    mask-size: 120% 100%;
  }
}

@keyframes flash {
  0% {
    opacity: 0;
  }
  20% {
    opacity: 0.7;
    filter: blur(40px);
  }
  40% {
    opacity: 0.5;
    filter: blur(20px);
  }
  80% {
    opacity: 1;
    filter: blur(80px);
  }
  100% {
    opacity: 0;
  }
}

/* Hover Effects */
.btn:hover {
  --border-radius: 100px / 1000px;
  color: rgba(var(--color-fg), 1);
  text-shadow: 0 0 2px rgba(var(--color-fg), 1);

  &::after {
    opacity: 1;
  }

  .bracket {
    filter: blur(1px);
  }

  .bracket.left {
    opacity: 1;
    transform: scale(0.75) translate(12px, 12px);
    border-width: 1px;
    border-radius: 2px;
  }

  .bracket.right {
    opacity: 1;
    transform: scale(0.75) translate(-12px, -10px);
    border-width: 1px;
    border-radius: 2px;
  }
}

@keyframes flash {
  0% {
    opacity: 0;
  }
  50% {
    opacity: 1;
    filter: blur(40px);
  }
  100% {
    opacity: 0;
  }
}

@keyframes rotate {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(-360deg);
  }
}
نوع: button
تاریخ ایجاد: 2026/06/05
آخرین بروزرسانی: 2026/06/05