← Kembali ke kursus
Pelajaran kursus · CSS
Pelajaran 06

Selektor lanjutan

Kombinator, pseudo-class struktural, dan selektor atribut.

Pahami konsepnya

Kombinator menghubungkan dua selektor menjadi hubungan. Spasi (descendant) menimpa semua keturunan: .menu a menyentuh semua tautan di kedalaman berapa pun. Tanda > (child) membatasi pada anak langsung: .menu > li hanya butir tingkat pertama — anak dari sub-daftar lolos. Tanda + (adjacent sibling) menimpa saudara tepat setelahnya: h2 + p mengatur paragraf pertama seusai heading. Tanda ~ (general sibling) menjangkau semua saudara setelahnya.

Pseudo-class struktural memilih berdasarkan posisi: :first-child dan :last-child, :nth-child(2) untuk urutan pasti, :nth-child(odd)/even untuk baris ganjil-genap (sahabat tabel zebra), dan :nth-child(3n) untuk tiap ketiga. Yang seru :not() yang memfilter kebalikannya: li:not(.aktif) menimpa semua butir kecuali yang aktif. Ada juga :focus untuk kondisi fokus input, :checked untuk checkbox terpilih, dan :focus-within yang menyala bila anak-anaknya sedang difokuskan.

Selektor atribut menyeleksi lewat atribut HTML: [type="email"] menimpa semua input email, [href^="https"] semua tautan yang diawali https, dan [data-harga] semua elemen yang punya atribut itu berapa pun nilainya — pintu menuju HTML yang kaya metadata tanpa class tambahan.

Coba contoh kode

/* kombinator */
.menu > li      { font-weight: bold; }
h2 + p          { text-indent: 0; }

/* struktural */
tr:nth-child(even) { background: #f2f7f9; }
li:not(.aktif)     { opacity: 0.55; }

/* atribut */
input[type="email"]   { border-color: teal; }
a[href^="https"]::after { content: " ↗"; }

Enam baris, enam rasa ketepatan: > menjaga sub-menu tidak ikut tebal, + memberi perlakuan khusus paragraf pembuka, nth-child(even) menulis zebra tanpa class manual, :not() meredupkan menu tak aktif, dan selektor atribut menandai tautan eksternal tanpa menyentuh HTML-nya — halaman terasa "tahu kondisinya sendiri".

Trik checkbox tanpa JavaScript

<input type="checkbox" id="saklar">
<label for="saklar">Tampilkan detail</label>

<div class="detail">Teks rahasia di sini.</div>

Dengan CSS: .detail { display: none; } lalu #saklar:checked ~ .detail { display: block; }. Kombinasi :checked dan ~ (saudara umum) membuat toggle bekerja murni di CSS — bukti bahwa selektor tepat bisa menggantikan skrip kecil.

Latihan singkat

Buat daftar tugas yang mencoret li yang memuat checkbox :checked (pakai ~ atau struktur label), lalu tandai semua tautan eksternal dengan selektor atribut.