CSS Pseudo-Class & Pseudo-Element
Perbedaan Mendasar
- Pseudo-Class menggunakan satu titik dua (
:) dan menargetkan state atau kondisi dari elemen - Pseudo-Element menggunakan dua titik dua (
::) dan menargetkan bagian spesifik dari elemen
CSS Pseudo-Class
Apa itu Pseudo-Class?
Pseudo-class adalah kata kunci yang ditambahkan ke selector untuk menentukan state khusus dari elemen yang dipilih. Pseudo-class memungkinkan kita memberikan style berdasarkan kondisi atau interaksi pengguna.
Syntax Dasar
selector:pseudo-class {
property: value;
}
Pseudo-Class yang Paling Umum
1. :hover – Saat Mouse Di Atas Elemen
Digunakan untuk memberikan efek saat kursor mouse berada di atas elemen.
Contoh:
button:hover {
background-color: #0056b3;
transform: scale(1.05);
cursor: pointer;
}
Penjelasan: Ketika pengguna mengarahkan mouse ke tombol, warna latar belakang berubah menjadi biru gelap dan ukuran tombol sedikit membesar (105% dari ukuran normal), menciptakan efek interaktif yang responsif.
2. :active – Saat Elemen Diklik
Mengatur style saat elemen sedang dalam kondisi aktif (sedang diklik).
Contoh:
button:active {
background-color: #003d82;
transform: scale(0.98);
}
Penjelasan: Saat tombol ditekan, warna menjadi lebih gelap dan ukuran sedikit mengecil, memberikan feedback visual bahwa tombol sedang ditekan.
3. :focus – Saat Elemen Mendapat Focus
Berguna untuk elemen form yang dapat menerima input keyboard.
Contoh:
input:focus {
border: 2px solid #4CAF50;
outline: none;
box-shadow: 0 0 5px rgba(76, 175, 80, 0.5);
}
Penjelasan: Ketika input field diklik atau dipilih dengan keyboard (Tab), border berubah menjadi hijau dengan shadow untuk menunjukkan elemen mana yang sedang aktif.
4. :visited – Link yang Sudah Dikunjungi
Khusus untuk elemen <a>, mengubah tampilan link yang sudah pernah dikunjungi.
Contoh:
a:visited {
color: purple;
text-decoration: line-through;
}
Penjelasan: Link yang sudah dikunjungi akan berubah warna menjadi ungu dan memiliki garis coret, membantu pengguna mengidentifikasi konten yang sudah mereka lihat.
5. :first-child dan :last-child
Menargetkan elemen pertama atau terakhir dari parent-nya.
Contoh:
li:first-child {
font-weight: bold;
color: #e74c3c;
}
li:last-child {
border-bottom: none;
margin-bottom: 0;
}
Penjelasan: Item pertama dalam list akan tebal dan berwarna merah, sementara item terakhir tidak memiliki border bawah, menciptakan hirarki visual yang jelas.
6. :nth-child() – Pola Seleksi Fleksibel
Memilih elemen berdasarkan posisi dengan pola matematika.
Contoh:
/* Baris genap */
tr:nth-child(even) {
background-color: #f2f2f2;
}
/* Baris ganjil */
tr:nth-child(odd) {
background-color: #ffffff;
}
/* Setiap elemen ke-3 */
div:nth-child(3n) {
border-left: 4px solid #3498db;
}
Penjelasan:
evendanoddmenciptakan efek zebra striping pada tabel, meningkatkan keterbacaan3nmemilih setiap elemen ketiga (3, 6, 9, dst), berguna untuk layout grid dengan pola khusus
7. :not() – Negasi Selector
Memilih semua elemen kecuali yang cocok dengan selector di dalam kurung.
Contoh:
button:not(.disabled) {
cursor: pointer;
opacity: 1;
}
p:not(.highlight) {
color: #666;
}
Penjelasan: Semua tombol akan memiliki cursor pointer kecuali yang memiliki class disabled. Semua paragraf akan berwarna abu-abu kecuali yang memiliki class highlight.
8. :disabled dan :enabled
Menargetkan elemen form berdasarkan status enabled/disabled-nya.
Contoh:
input:disabled {
background-color: #e0e0e0;
cursor: not-allowed;
opacity: 0.6;
}
input:enabled {
background-color: white;
}
Penjelasan: Input yang disabled akan terlihat abu-abu, redup, dan cursor berubah menjadi tanda “tidak diizinkan”, memberikan indikasi visual yang jelas bahwa field tidak bisa diisi.
9. :checked – Untuk Checkbox dan Radio Button
Contoh:
input[type="checkbox"]:checked + label {
color: green;
font-weight: bold;
}
input[type="radio"]:checked {
outline: 2px solid #4CAF50;
}
Penjelasan: Ketika checkbox dicentang, label di sebelahnya akan berubah menjadi hijau dan tebal. Menggunakan selector + (adjacent sibling) untuk menargetkan label yang langsung mengikuti checkbox.
CSS Pseudo-Element
Apa itu Pseudo-Element?
Pseudo-element memungkinkan kita untuk menambahkan style pada bagian tertentu dari elemen atau menambahkan konten dekoratif tanpa menambahkan markup HTML.
Syntax Dasar
selector::pseudo-element {
property: value;
}
Catatan: Pseudo-element modern menggunakan dua titik dua (::), meskipun sintaks lama dengan satu titik dua (:) masih didukung untuk kompatibilitas.
Pseudo-Element yang Paling Umum
1. ::before – Menambah Konten Sebelum Elemen
Menambahkan konten dekoratif di awal elemen.
Contoh:
.penting::before {
content: "⚠️ ";
color: #ff9800;
font-weight: bold;
}
.quote::before {
content: """;
font-size: 3em;
color: #95a5a6;
position: absolute;
left: -20px;
top: -10px;
}
Penjelasan:
- Kelas
.pentingakan mendapat ikon peringatan di awal teksnya - Kelas
.quotemendapat tanda kutip besar sebagai dekorasi, diposisikan secara absolute untuk efek visual yang menarik
2. ::after – Menambah Konten Setelah Elemen
Menambahkan konten dekoratif di akhir elemen.
Contoh:
.external-link::after {
content: " 🔗";
font-size: 0.8em;
margin-left: 5px;
}
.clearfix::after {
content: "";
display: table;
clear: both;
}
Penjelasan:
- Link eksternal mendapat ikon link kecil di akhir
- Teknik clearfix menggunakan
::afterdengan content kosong untuk mengatasi masalah float collapse pada layout
3. ::first-letter – Huruf Pertama
Memberikan style khusus pada huruf pertama dari elemen.
Contoh:
p::first-letter {
font-size: 3em;
font-weight: bold;
color: #e74c3c;
float: left;
margin-right: 10px;
line-height: 1;
}
Penjelasan: Menciptakan efek “drop cap” seperti di majalah atau buku, di mana huruf pertama paragraf berukuran besar dan menonjol, memberikan sentuhan editorial yang elegan.
4. ::first-line – Baris Pertama
Memberikan style khusus pada baris pertama teks.
Contoh:
article p::first-line {
font-weight: bold;
font-variant: small-caps;
color: #2c3e50;
letter-spacing: 1px;
}
Penjelasan: Baris pertama paragraf dalam artikel akan tebal, menggunakan small caps (huruf kecil berbentuk kapital), memberikan penekanan pada pembuka paragraf.
5. ::selection – Teks yang Diseleksi
Mengatur tampilan saat teks disorot/dipilih oleh pengguna.
Contoh:
::selection {
background-color: #3498db;
color: white;
}
::-moz-selection {
background-color: #3498db;
color: white;
}
Penjelasan: Ketika pengguna menyorot teks dengan mouse, latar belakang akan berwarna biru dan teks putih, menggantikan warna default browser. -moz-selection diperlukan untuk Firefox versi lama.
6. ::placeholder – Placeholder pada Input
Mengatur style placeholder text pada form input.
Contoh:
input::placeholder {
color: #95a5a6;
font-style: italic;
opacity: 0.7;
}
textarea::placeholder {
color: #bdc3c7;
font-size: 0.9em;
}
Penjelasan: Placeholder text akan berwarna abu-abu, italic, dan sedikit transparan, membedakan dengan teks yang sebenarnya diketik pengguna.
Kombinasi Pseudo-Class dan Pseudo-Element
Kita bisa menggabungkan pseudo-class dengan pseudo-element untuk kontrol yang lebih spesifik.
Contoh:
/* Before muncul saat hover */
a:hover::before {
content: "👉 ";
}
/* First letter berubah saat paragraph di-hover */
p:hover::first-letter {
color: #e74c3c;
font-size: 4em;
}
/* Placeholder berubah saat input focus */
input:focus::placeholder {
opacity: 0.3;
transform: translateX(10px);
}
Penjelasan: Kombinasi ini memberikan interaktivitas lebih kompleks. Misalnya, ikon tangan muncul saat link di-hover, huruf pertama membesar saat paragraf di-hover, dan placeholder memudar saat input mendapat fokus.
Tips dan Best Practices
1. Gunakan Syntax Modern
Selalu gunakan :: untuk pseudo-element (bukan :) untuk kejelasan kode.
2. Property content Wajib untuk ::before dan ::after
Pseudo-element ::before dan ::after tidak akan muncul tanpa property content, bahkan jika kosong.
/* Benar */
.element::before {
content: "";
/* style lainnya */
}
/* Salah - tidak akan muncul */
.element::before {
background: red;
width: 10px;
}
3. Kombinasikan dengan Transition untuk Animasi Smooth
button {
transition: all 0.3s ease;
}
button:hover {
background-color: blue;
}
4. Perhatikan Spesifisitas
Pseudo-class dan pseudo-element menambah spesifisitas selector, sehingga bisa override style lain.
5. Aksesibilitas
Konten yang ditambahkan via ::before dan ::after tidak terbaca oleh screen reader. Jangan gunakan untuk konten penting, hanya untuk dekorasi.
6. Browser Compatibility
Beberapa pseudo-class/element modern mungkin perlu vendor prefix untuk browser lama:
input::-webkit-input-placeholder { /* Chrome, Safari */
color: #999;
}
input::-moz-placeholder { /* Firefox 19+ */
color: #999;
}
input:-ms-input-placeholder { /* IE 10+ */
color: #999;
}
Kesimpulan
Pseudo-class dan pseudo-element adalah tools dalam CSS yang memungkinkan kita:
- Membuat interaksi user yang lebih baik dengan
:hover,:focus,:active - Menambahkan konten dekoratif tanpa markup HTML tambahan dengan
::beforedan::after - Styling elemen berdasarkan posisi dengan
:nth-child(),:first-child,:last-child - Memberikan feedback visual untuk form dengan
:valid,:invalid,:checked - Styling bagian spesifik teks dengan
::first-letter,::first-line,::selection
Dengan menguasai konsep ini, Anda dapat membuat interface yang lebih interaktif, menarik, dan professional tanpa perlu JavaScript atau markup HTML yang kompleks.