Pseudo-kelas Relasional :has()
Pilih elemen induk berdasarkan turunannya menggunakan pseudo-kelas relasional :has() yang canggih.
Pseudo-kelas Relasional :has() adalah pelajaran CSS Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar CSS Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus CSS Academy mencakup 4 pelajaran total.
Apa Itu :has()?
Kelas semu :has() memilih elemen jika elemen tersebut mengandung turunan yang cocok dengan argumennya. Sering disebut "pemilih induk", fitur ini memungkinkan Anda menerapkan gaya pada elemen induk berdasarkan anak-anaknya — kemampuan yang sebelumnya tidak pernah dimiliki CSS.
Sintaks Dasar
.card:has(img) memilih elemen .card apa pun yang mengandung turunan img. Argumennya adalah daftar pemilih relatif — daftar pemilih CSS valid yang mendeskripsikan elemen relatif terhadap elemen subjek.
Menerapkan Gaya pada Elemen Induk
Terapkan gaya pada wadah formulir saat memiliki masukan yang tidak valid: form:has(:invalid) { border-color: red; }. Terapkan gaya pada bagian yang mengandung judul: section:has(h2) { padding-top: 2rem; }. Elemen induk mengubah tampilannya berdasarkan status anak.
Pemilihan Elemen Saudara
:has() dapat memilih elemen saudara sebelumnya — sesuatu yang tidak dapat dilakukan oleh + dan ~. h2:has(+ p) memilih elemen h2 yang langsung diikuti p. li:has(~ .active) memilih elemen li yang memiliki elemen saudara .active setelahnya.
Penerapan Gaya Berdasarkan Status Formulir
Respons terhadap validitas formulir bawaan tanpa JavaScript: input:has(~ .error-msg) menerapkan gaya pada masukan yang memiliki pesan kesalahan sebagai elemen saudara. label:has(+ input:required) menerapkan gaya pada label yang pasangannya berupa masukan wajib — semuanya hanya dengan CSS.
Status Navigasi
Sorot wadah navigasi berdasarkan anak yang aktif: nav:has(.active) menerapkan gaya ke seluruh nav ketika salah satu anak memiliki kelas active. Ini berguna untuk menunjukkan bagian navigasi yang sedang aktif pada tingkat wadah.
Menggabungkan dengan Kelas Semu Lainnya
.grid:has(.card:focus-within) menerapkan gaya pada seluruh kisi ketika salah satu kartu menerima fokus dari papan ketik. .dropdown:has(:hover) menjaga menu tarik-turun tetap terbuka saat penunjuk diarahkan ke turunan mana pun — lebih rapi daripada rangkaian penggabung saudara yang rumit.
Padanan Kueri Media dalam CSS
.sidebar:has(nav) menerapkan tata letak yang berbeda dibandingkan dengan .sidebar:not(:has(nav)). Tata letak kondisional tanpa JavaScript: ada atau tidaknya anak tertentu menentukan tata letak induk — sehingga memungkinkan CSS yang benar-benar adaptif dan sadar konten.
Pertimbangan Kinerja
:has() dengan pemilih argumen yang luas (misalnya, :has(*)) dapat membebani kinerja — peramban harus memeriksa setiap elemen. Buat argumen :has() tetap spesifik. Jika memungkinkan, pilih :has(> .specific-child) (anak langsung) daripada :has(.specific-child) (turunan mana pun).
Dukungan Peramban
:has() didukung di Chrome 105+, Safari 15.4+, dan Firefox 121+. Dukungan standar dasar penuh tersedia sejak akhir 2023. Tidak ada lapisan kompatibilitas untuk fitur ini (simulasinya memerlukan JavaScript) — gunakan dengan peningkatan bertahap pada peramban lama jika fitur ini tidak kritis.
Menggantikan Pola JavaScript
Pola yang sebelumnya memerlukan pendengar peristiwa JS: "tambahkan kelas ke induk ketika anak menerima fokus", "tampilkan hamparan ketika pemicu modal ada", "terapkan gaya berbeda pada kisi ketika memiliki tepat tiga item". :has() menangani semuanya secara deklaratif.
Uji Pengetahuan
Apa yang membuat :has() unik dibandingkan dengan penggabung CSS yang sudah ada seperti + dan ~?
Ringkasan
:has() adalah kelas semu relasional sejati pertama milik CSS yang memungkinkan pemilihan elemen induk dan elemen saudara sebelumnya. Fitur ini mendukung penerapan gaya berbasis konten, respons terhadap status formulir, penyorotan navigasi, serta banyak pola yang sebelumnya memerlukan manipulasi DOM dengan JavaScript — semuanya secara deklaratif dalam CSS.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pseudo-kelas Relasional :has()” gratis?
Ya — teks lengkap “Pseudo-kelas Relasional :has()” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus CSS Academy, upgrade ke CoddyKit PRO. Kursus CSS Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pseudo-kelas Relasional :has()”?
Pilih elemen induk berdasarkan turunannya menggunakan pseudo-kelas relasional :has() yang canggih. Kamu berlatih CSS Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai CSS Academy?
Tidak diperlukan pengalaman sebelumnya. CSS Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Pseudo-kelas Relasional :has()” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran CSS Academy ini?
Ya. Setiap pelajaran CSS Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Penyarangan CSS Bawaan
- Pseudo-kelas Relasional :has()
- @scope untuk Gaya Terlingkup
- API Transisi Tampilan