SnippetUI

Sakelar Toggle Kustom

Contoh implementasi sakelar toggle (toggle switch) kustom dengan animasi yang estetis sebagai pengganti kotak centang standar browser.

HTMLCSS

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).