Snippet ini menggantikan tampilan kotak centang standar menjadi sakelar toggle yang modern dan estetis. Dengan memanfaatkan elemen pseudo (pseudo-elements) dan pseudo-class :checked pada CSS, animasi yang mulus dapat diwujudkan sepenuhnya tanpa JavaScript.

Kode Implementasi

<label class="custom-toggle">
  <input type="checkbox" class="custom-toggle-input" aria-label="Toggle Switch" />
  <span class="custom-toggle-slider"></span>
</label>
/* Kontainer sakelar toggle */
.custom-toggle {
  position: relative;
  display: inline-block;
  width: 60px;
  height: 34px;
}

/* Menyembunyikan kotak centang default */
.custom-toggle-input {
  opacity: 0;
  width: 0;
  height: 0;
}

/* Latar belakang slider */
.custom-toggle-slider {
  position: absolute;
  cursor: pointer;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-color: #e2e8f0;
  transition: background-color 0.4s;
  border-radius: 34px;
  box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.1);
}

/* Bagian kenop slider */
.custom-toggle-slider:before {
  position: absolute;
  content: "";
  height: 26px;
  width: 26px;
  left: 4px;
  bottom: 4px;
  background-color: white;
  transition: transform 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55);
  border-radius: 50%;
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}

/* Warna latar saat dicentang */
.custom-toggle-input:checked + .custom-toggle-slider {
  background-color: #3b82f6;
}

/* Garis luar saat fokus keyboard */
.custom-toggle-input:focus-visible + .custom-toggle-slider {
  outline: 2px solid #3b82f6;
  outline-offset: 2px;
}

/* Pergerakan kenop saat dicentang */
.custom-toggle-input:checked + .custom-toggle-slider:before {
  transform: translateX(26px);
}

Poin Penting Implementasi

Karena elemen <input type="checkbox"> bawaan memiliki tampilan yang berbeda antar peramban (browser) dan sulit dikustomisasi, snippet ini menyembunyikan elemen aslinya dan memanfaatkan elemen <span> (slider) yang disandingkan untuk membentuk antarmuka baru.

  1. Menyembunyikan Kotak Centang (Checkbox): Dengan menetapkan opacity: 0 beserta ukuran lebar dan tinggi menjadi 0, kotak centang menjadi kasatmata tanpa menghilangkan fungsionalitas aslinya.
  2. Gaya Slider: Bagian kenop (knob) yang berbentuk lingkaran dibuat menggunakan elemen pseudo ::before.
  3. Animasi Mulus dengan Easing: Penggunaan transition: transform 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55) menghasilkan pergerakan kenop yang mulus dengan efek sedikit memantul (bouncing) yang memanjakan mata.
  4. Aksesibilitas Terjaga: Implementasi pseudo-class :focus-visible memunculkan garis tepi (outline), sehingga status fokus tetap terlihat jelas bagi pengguna yang bernavigasi menggunakan keyboard.

Sakelar toggle ini sangat cocok diaplikasikan pada skenario yang membutuhkan operasi on/off intuitif, seperti pada menu pengaturan preferensi atau peralihan mode gelap (dark mode).