پیش‌نمایش زنده
کد HTML
<div class="onoff-btn warning">
  <input class="onoff-btn-checkbox" type="checkbox" />
  <svg
    xmlns="http://www.w3.org/2000/svg"
    viewBox="0 0 24 24"
    stroke-width="3"
    class="onoff-btn-icon"
  >
    <path
      class="icon-ring"
      stroke-linecap="round"
      stroke-linejoin="round"
      d="M14.857 17.082a23.848 23.848 0 0 0 5.454-1.31A8.967 8.967 0 0 1 18 9.75V9A6 6 0 0 0 6 9v.75a8.967 8.967 0 0 1-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 0 1-5.714 0m5.714 0a3 3 0 1 1-5.714 0"
    ></path>
    <path
      class="icon-silent"
      stroke-linecap="round"
      stroke-linejoin="round"
      d="M9.143 17.082a24.248 24.248 0 0 0 3.844.148m-3.844-.148a23.856 23.856 0 0 1-5.455-1.31 8.964 8.964 0 0 0 2.3-5.542m3.155 6.852a3 3 0 0 0 5.667 1.97m1.965-2.277L21 21m-4.225-4.225a23.81 23.81 0 0 0 3.536-1.003A8.967 8.967 0 0 1 18 9.75V9A6 6 0 0 0 6.53 6.53m10.245 10.245L6.53 6.53M3 3l3.53 3.53"
    ></path>
  </svg>
</div>
کد CSS
.onoff-btn {
  --hue: 0; /* Adjust color here */
  --saturation: 70%;
  --height: 60px;
  --icon-size: 36px;
  --transition-speed: 100ms;

  display: flex;
  align-items: center;
  justify-content: center;
  position: relative;

  height: var(--height);
  min-width: var(--height);

  padding: 0rem 0rem;
  margin: 36px 16px;

  font-family: inherit;
  font-weight: 800;
  font-size: 1.2em;

  outline: none;
  border: none;
  border-radius: 100ch;
  background-color: hsl(var(--hue), var(--saturation), 40%);
  color: hsl(var(--hue), var(--saturation), 88%);

  box-shadow:
    2px 2px 2px 0 hsl(var(--hue), var(--saturation), 20%),
    0 0 1px -1px hsl(var(--hue), var(--saturation), 0%),
    1px 1px 2px 15px hsl(var(--hue), var(--saturation), 40%),
    0 0 0 16px hsl(var(--hue), var(--saturation), 60%),
    -3px -3px 2px 15px hsl(var(--hue), var(--saturation), 75%),
    3px 3px 4px 16px hsl(var(--hue), var(--saturation), 15%),
    0 0 0 20px hsl(var(--hue), var(--saturation), 25%),
    6px 6px 18px 8px hsl(var(--hue), var(--saturation), 20%),
    2px 2px 6px 0 hsl(var(--hue), var(--saturation), 60%) inset,
    -2px -2px 6px 0px hsl(var(--hue), var(--saturation), 20%) inset;

  cursor: pointer;

  transition: box-shadow var(--transition-speed) ease-in-out;
}

.onoff-btn-icon {
  stroke: hsl(var(--hue), var(--saturation), 88%);
  fill: none;
  width: var(--icon-size);
}

.onoff-btn-text,
.onoff-btn-icon {
  transform-origin: center;
  transition: transform var(--transition-speed) ease-in-out;
}

.onoff-btn:hover,
.onoff-btn:focus-visible {
  box-shadow:
    2px 2px 2px 0 hsl(var(--hue), var(--saturation), 20%),
    0 0 6px -1px hsl(var(--hue), var(--saturation), 10%),
    1px 1px 2px 15px hsl(var(--hue), var(--saturation), 40%),
    0 0 0 16px hsl(var(--hue), var(--saturation), 60%),
    -3px -3px 2px 15px hsl(var(--hue), var(--saturation), 75%),
    3px 3px 4px 16px hsl(var(--hue), var(--saturation), 15%),
    0 0 0 20px hsl(var(--hue), var(--saturation), 25%),
    6px 6px 18px 8px hsl(var(--hue), var(--saturation), 20%),
    2px 2px 6px 0 hsl(var(--hue), var(--saturation), 80%) inset,
    -2px -2px 6px 0px hsl(var(--hue), var(--saturation), 35%) inset;

  .onoff-btn-text,
  .onoff-btn-icon {
    transform: scale(1.1);
  }
}

.onoff-btn:active {
  box-shadow:
    2px 2px 2px 0 hsl(var(--hue), var(--saturation), 60%),
    0 0 6px -1px hsl(var(--hue), var(--saturation), 10%),
    1px 1px 2px 15px hsl(var(--hue), var(--saturation), 40%),
    0 0 0 16px hsl(var(--hue), var(--saturation), 60%),
    -3px -3px 2px 15px hsl(var(--hue), var(--saturation), 75%),
    3px 3px 4px 16px hsl(var(--hue), var(--saturation), 15%),
    0 0 0 20px hsl(var(--hue), var(--saturation), 25%),
    6px 6px 18px 8px hsl(var(--hue), var(--saturation), 20%),
    6px 6px 8px 0 hsl(var(--hue), var(--saturation), 20%) inset,
    -6px -6px 8px 0px hsl(var(--hue), var(--saturation), 25%) inset;

  .onoff-btn-text,
  .onoff-btn-icon {
    transform: scale(0.85);
  }
}

.onoff-btn-checkbox {
  position: absolute;
  z-index: 1;
  opacity: 0;
  width: 100%;
  height: 100%;
  cursor: pointer;
}

.onoff-btn:has(.onoff-btn-checkbox:checked) {
  &:active {
    box-shadow:
      2px 2px 2px 0 hsl(var(--hue), var(--saturation), 60%),
      0 0 6px -1px hsl(var(--hue), var(--saturation), 10%),
      1px 1px 2px 15px hsl(var(--hue), var(--saturation), 40%),
      0 0 0 16px hsl(var(--hue), var(--saturation), 60%),
      -3px -3px 2px 15px hsl(var(--hue), var(--saturation), 75%),
      3px 3px 4px 16px hsl(var(--hue), var(--saturation), 15%),
      0 0 0 20px hsl(var(--hue), var(--saturation), 25%),
      6px 6px 18px 8px hsl(var(--hue), var(--saturation), 20%),
      6px 6px 8px 0 hsl(var(--hue), var(--saturation), 20%) inset,
      -6px -6px 8px 0px hsl(var(--hue), var(--saturation), 25%) inset;

    .onoff-btn-text,
    .onoff-btn-icon {
      transform: scale(0.85);
    }
  }

  box-shadow:
    2px 2px 2px 0 hsl(var(--hue), var(--saturation), 60%),
    0 0 6px -1px hsl(var(--hue), var(--saturation), 10%),
    1px 1px 2px 15px hsl(var(--hue), var(--saturation), 40%),
    0 0 0 16px hsl(var(--hue), var(--saturation), 60%),
    -3px -3px 2px 15px hsl(var(--hue), var(--saturation), 75%),
    3px 3px 4px 16px hsl(var(--hue), var(--saturation), 15%),
    0 0 0 20px hsl(var(--hue), var(--saturation), 25%),
    6px 6px 18px 8px hsl(var(--hue), var(--saturation), 20%),
    2px 2px 6px 0 hsl(var(--hue), var(--saturation), 20%) inset,
    -2px -2px 6px 0px hsl(var(--hue), var(--saturation), 25%) inset;

  .onoff-btn-text,
  .onoff-btn-icon {
    transform: scale(0.95);
  }
}

.onoff-btn:has(.onoff-btn-checkbox:focus-visible) {
  --saturation: 95%;
}

.onoff-btn.onoff-btn:has(.onoff-btn-checkbox:disabled) {
  --saturation: 0%;

  cursor: not-allowed;
  box-shadow:
    2px 2px 2px 0 hsl(var(--hue), var(--saturation), 20%),
    0 0 1px -1px hsl(var(--hue), var(--saturation), 0%),
    1px 1px 2px 15px hsl(var(--hue), var(--saturation), 40%),
    0 0 0 16px hsl(var(--hue), var(--saturation), 60%),
    -3px -3px 2px 15px hsl(var(--hue), var(--saturation), 75%),
    3px 3px 4px 16px hsl(var(--hue), var(--saturation), 15%),
    0 0 0 20px hsl(var(--hue), var(--saturation), 25%),
    6px 6px 18px 8px hsl(var(--hue), var(--saturation), 20%),
    2px 2px 6px 0 hsl(var(--hue), var(--saturation), 60%) inset,
    -2px -2px 6px 0px hsl(var(--hue), var(--saturation), 20%) inset;

  .onoff-btn-text,
  .onoff-btn-icon {
    transform: scale(1);
  }
}

/* Variations */
.warning {
  --hue: 38; /* Adjust color here */
  --saturation: 75%;
}

.icon-ring,
.icon-silent {
  stroke-width: 2px;
  transform-origin: center;
}

.icon-ring {
  opacity: 0;
}

.onoff-btn.onoff-btn:has(.onoff-btn-checkbox:not(:checked)) {
  --saturation: 90%;

  .icon-ring {
    opacity: 1;
    animation: icon-shuffle 0.4s ease-in-out;
  }
  .icon-silent {
    opacity: 0;
  }
}

@keyframes icon-shuffle {
  0% {
    transform: rotate(10deg);
  }
  20% {
    transform: rotate(-10deg);
  }
  40% {
    transform: rotate(15deg);
  }
  60% {
    transform: rotate(-15deg);
  }
  80% {
    transform: rotate(0deg);
  }
}
نوع: button
تاریخ ایجاد: 2026/06/05
آخرین بروزرسانی: 2026/06/05