Menu

Hover CSS: :hover, :active, dan Warna State Link

Pseudo-class :hover memberi style pada elemen selama pointer berada di atasnya. Pelajari efek hover untuk tombol dan kartu, transisi yang mulus, warna link dengan :link, :visited, :hover, dan :active dalam urutan yang benar, serta hover di layar sentuh.

Halaman ini dilengkapi editor yang bisa dijalankan. Edit, jalankan, dan lihat output-nya seketika.

Cara kerja :hover

:hover adalah pseudo-class yang cocok dengan elemen selama pointer mouse berada di atasnya. Tambahkan ke selector apa saja dan tulis style untuk state hover-nya:

Hanya deklarasi di aturan :hover yang berubah; semua yang lain tetap terbawa dari .btn. Saat pointer pergi, elemen kembali ke style normalnya.

Efek hover yang mulus dengan transition

Perubahan saat hover terjadi seketika kecuali kamu menambahkan transition pada aturan normal (bukan aturan :hover), supaya animasinya berjalan saat masuk maupun keluar:

transform dan opacity adalah properti yang paling ringan untuk dianimasikan; keduanya tidak menggeser elemen di sekitarnya. Menganimasikan width, height, atau margin membuat halaman menata ulang tata letak di setiap frame. Durasi, delay, dan kurva easing ada di halaman transition CSS.

Link punya empat state klasik, ditambah fokus keyboard, dan urutan aturannya penting:

Pseudo-classBerlaku saat
:linkLink belum pernah dikunjungi
:visitedURL-nya ada di riwayat browser
:hoverPointer berada di atasnya
:activeLink sedang ditekan
:focus-visibleLink mendapat fokus keyboard

Semuanya punya specificity yang sama, jadi aturan yang belakangan yang menang saat dua aturan cocok. Link yang sudah dikunjungi dan sedang di-hover cocok dengan :visited maupun :hover; jika :visited ditulis terakhir, warna hover tidak pernah muncul. Urutan yang aman adalah Link, Visited, Hover, Active (LVHA):

Browser membatasi apa yang bisa diubah :visited, untuk mencegah halaman membaca riwayatmu. Hanya properti yang berkaitan dengan warna (color, background-color, border-color, outline-color, dan beberapa lainnya) yang berpengaruh, dan script selalu melihat nilai yang belum dikunjungi.

:active: state saat ditekan

:active cocok selama elemen sedang ditekan. Gerakan kecil membuat tombol terasa nyata:

Hover pada induk untuk memberi style pada anak

State hover dimiliki oleh elemen di bawah pointer dan setiap leluhurnya. Jadi .card:hover .title memberi style pada judul setiap kali bagian mana pun dari kartu di-hover, dan ide yang sama bisa memunculkan elemen yang tersembunyi:

Baris :focus-within itu penting: tanpanya, pengguna keyboard yang menekan Tab ke tombol Delete akan menekan tombol yang tidak terlihat. Pasangkan setiap efek yang muncul saat hover dengan aturan fokus.

Hover di layar sentuh

Ponsel dan tablet tidak punya pointer yang bisa diam di atas elemen. Sebagian besar browser mobile menerapkan :hover pada ketukan pertama dan mempertahankannya sampai kamu mengetuk tempat lain, sehingga style hover bisa terlihat tertahan. Dua aturan menjaga hal ini tetap terkendali:

  • Jangan pernah menaruh satu-satunya cara mencapai konten di balik :hover. Menu yang terbuka saat hover juga harus bisa terbuka saat diklik.
  • Bungkus efek hover yang murni dekoratif di dalam media query yang memeriksa perangkat hover sungguhan:
@media (hover: hover) {
  .card:hover { transform: translateY(-4px); }
}

Kesalahan umum

  • Spasi sebelum titik dua. .btn :hover berarti "elemen yang di-hover di dalam .btn". Tulis .btn:hover.
  • transition hanya di aturan :hover. Animasinya jadi berjalan saat masuk tetapi langsung melompat saat keluar. Taruh di aturan normalnya.
  • Urutan link yang salah. Pertahankan :link, :visited, :hover, :active dalam urutan itu.
  • Hover tanpa style fokus. Pengguna keyboard tidak pernah memicu :hover; beri juga elemen interaktif style :focus-visible.
  • Hover pada elemen yang tertutup elemen lain. Overlay yang tidak terlihat (sering kali pseudo-element absolute) bisa menangkap pointer. pointer-events: none pada overlay memperbaikinya.

Pertanyaan yang sering diajukan

Bagaimana cara menambahkan efek hover di CSS?

Tulis aturan dengan :hover setelah selector: .btn:hover { background: #1d4ed8; }. Deklarasinya berlaku selama pointer berada di atas elemen. Tambahkan transition: background 0.2s; pada aturan normalnya untuk menganimasikan perubahan itu.

Apa perbedaan :hover dan :active?

:hover berlaku selama pointer berada di atas elemen. :active berlaku selama elemen sedang ditekan, dari tombol mouse ditekan sampai dilepas. Tombol yang sedang ditekan biasanya berada dalam state hover dan active sekaligus.

Bagaimana urutan pseudo-class untuk link?

:link, :visited, :hover, :active (ingat LVHA, atau "LoVe HAte"). Specificity keempatnya sama, jadi aturan yang belakangan yang menang; dengan urutan lain, style visited atau hover bisa menutupi style hover atau active.

Bagaimana cara mengubah warna link di CSS?

Beri style pada elemen a: a { color: #2563eb; }, lalu a:visited { color: #7c3aed; } dan a:hover { color: #1d4ed8; } untuk state lainnya. Mengatur color pada a sudah mencakup link yang belum dikunjungi maupun yang sudah dikunjungi.

Apakah hover berfungsi di mobile?

Layar sentuh tidak punya pointer yang bisa diam di atas elemen. Sebagian besar browser mobile menerapkan :hover saat diketuk dan mempertahankannya sampai kamu mengetuk tempat lain, sehingga style hover bisa tertahan. Bungkus efek yang khusus hover di dalam @media (hover: hover) dan jangan pernah menyembunyikan konten penting di balik hover.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai