Hover & States — Tailwind CSS

Tailwind mendukung pseudo-class dan pseudo-element dengan prefix: State modifiers: hover: — saat mouse hover focus: — saat elemen fokus active: — saat sedang…

State adalah keadaan elemen saat ini: sedang ditunjuk kursor, sedang dipilih untuk diketik, sedang ditekan, atau sedang dimatikan. Di Tailwind, nama keadaannya kamu tempel sebagai awalan: hover:bg-blue-600 artinya "pakai latar blue-600, tapi cuma selama kursor ada di atas elemen ini". Bayangin tombol lift. Bentuknya sama terus, tapi tampilannya ganti sesuai keadaan: biasa, menyala waktu ditekan, mati kalau lift-nya rusak. Awalan state melakukan hal yang sama untuk tombol dan kolom isian di website kamu.

🧪 Tebakan cepat: tombol bg-blue-500 hover:bg-blue-600 kamu tap di HP. Warnanya berubah jadi blue-600? Tebak dulu, jawabannya ada di bagian "Hover di HP".

Awalan state: class yang menunggu keadaan

Sama seperti md: dan dark:, awalan state cuma menyalakan class di belakangnya kalau syaratnya terpenuhi. Ini tombol yang sama dengan yang ada di Lab:

<button id="btn" class="bg-blue-500 hover:bg-blue-600 active:bg-blue-700 text-white px-4 py-2 rounded">
  Hover Saya
</button>

Dari hover:bg-blue-600, Tailwind v4 membuat CSS ini:

@media (hover: hover) {
  .hover\:bg-blue-600:hover {
    background-color: var(--color-blue-600);
  }
}

Keadaan lain: focus, focus-visible, active, disabled

Awalan Berlaku waktu Contoh
hover: kursor ada di atas elemen hover:bg-blue-600
focus: elemen sedang fokus: kolom yang diklik untuk diketik, atau elemen yang dicapai lewat Tab focus:border-blue-500
focus-visible: elemen fokus dan browser menilai tandanya perlu kelihatan, biasanya waktu pakai keyboard focus-visible:ring-2
active: elemen sedang ditekan active:bg-blue-700
disabled: elemen punya atribut disabled disabled:opacity-50

Ini kolom email dari Lab:

<input type="email" placeholder="Email" class="border-2 border-gray-300 focus:border-blue-500 rounded px-3 py-2">

focus-visible: mirip focus:, bedanya browser yang memutuskan kapan tandanya muncul: waktu kamu pindah pakai Tab, tandanya kelihatan; waktu tombol diklik pakai mouse, biasanya gak. Cocok untuk tombol: focus-visible:ring-2 focus-visible:ring-blue-300 menggambar cincin 2px berwarna blue-300 di sekeliling tombol.

Tombol dengan atribut disabled gak bisa diklik dan gak bisa dicapai lewat Tab. disabled:opacity-50 disabled:cursor-not-allowed bikin tombolnya pudar dan kursornya berubah jadi tanda dilarang, supaya pengguna tahu tombolnya mati.

Hover di HP

Layar sentuh gak punya kursor yang melayang di atas tombol. Browser di HP melaporkan bahwa alat input utamanya gak bisa hover, jadi @media (hover: hover) gak terpenuhi, dan hover:bg-blue-600 gak pernah dipakai. Tap tombolnya di HP, warnanya tetap blue-500. Itu jawaban tebakannya. active: tetap jalan selama jarimu menekan tombol.

Di Tailwind v3, hover: belum dibatasi begini, jadi di HP warna hover sering "nyangkut" setelah tombolnya di-tap. Di v4 itu sudah beres. Akibatnya buat desain: jangan sembunyikan info penting yang cuma muncul waktu hover, karena pengguna HP gak akan pernah melihatnya.

⚠️ Jebakan yang sering ketemu

TL;DR: Awalan state menyalakan class cuma di keadaan tertentu: hover: selama kursor di atas elemen, focus: waktu elemen fokus (kolom yang sedang diketik), focus-visible: waktu tanda fokusnya perlu kelihatan (biasanya lewat keyboard), active: selama ditekan, disabled: waktu elemen punya atribut disabled. Warna biasanya tetap ditulis tanpa awalan, versi state-nya menimpa: bg-blue-500 hover:bg-blue-600. Di Tailwind v4, hover: cuma jalan di perangkat yang bisa hover, jadi di HP gak berlaku.

Yang akan kamu pelajari