CSS Academy · Pelajaran

Pseudo-kelas Hubungan :has()

Pilih elemen induk berdasarkan anaknya menggunakan pseudo-kelas hubungan :has() yang berkuasa.

Pelajaran 2 daripada 413 langkah

Pseudo-kelas Hubungan :has() ialah pelajaran CSS Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran CSS Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus CSS Academy merangkumi sejumlah 4 pelajaran.

Apakah :has()?

Kelas pseudo :has() memilih sesuatu elemen jika elemen itu mengandungi turunan yang sepadan dengan argumen. Ia sering dipanggil "pemilih induk" dan membolehkan penggayaan elemen induk berdasarkan anak-anaknya — keupayaan yang sebelum ini tidak pernah ada dalam CSS.

Sintaks Asas

.card:has(img) memilih mana-mana elemen .card yang mengandungi turunan img. Argumennya ialah senarai pemilih relatif — mana-mana pemilih CSS yang sah dan menerangkan elemen secara relatif kepada elemen subjek.

Menggayakan Elemen Induk

Gayakan bekas borang apabila ia mempunyai medan masukan yang tidak sah: form:has(:invalid) { border-color: red; }. Gayakan bahagian yang mengandungi tajuk: section:has(h2) { padding-top: 2rem; }. Penampilan induk berubah berdasarkan keadaan anak.

Pemilihan Elemen Saudara

:has() boleh memilih elemen saudara yang terdahulu — sesuatu yang tidak dapat dilakukan oleh + dan ~. h2:has(+ p) memilih elemen h2 yang diikuti terus oleh p. li:has(~ .active) memilih elemen li yang mempunyai elemen saudara .active selepasnya.

Penggayaan Keadaan Borang

Bertindak balas terhadap kesahan borang asli tanpa JavaScript: input:has(~ .error-msg) menggayakan medan masukan yang mempunyai mesej ralat sebagai elemen saudara. label:has(+ input:required) menggayakan label yang medan masukannya berpasangan dan diperlukan — semuanya hanya dengan CSS.

Keadaan Navigasi

Serlahkan bekas navigasi berdasarkan anak yang aktif: nav:has(.active) menggunakan gaya pada keseluruhan nav apabila mana-mana anak mempunyai kelas aktif. Ini berguna untuk menunjukkan bahagian navigasi yang sedang dipilih pada peringkat bekas.

Menggabungkan dengan Kelas Pseudo Lain

.grid:has(.card:focus-within) menggayakan keseluruhan grid apabila mana-mana kad menerima fokus papan kekunci. .dropdown:has(:hover) mengekalkan menu lungsur terbuka semasa menuding pada mana-mana turunan — lebih kemas berbanding rangkaian penggabung elemen saudara yang kompleks.

Setara Pertanyaan Media dalam CSS

.sidebar:has(nav) menggunakan reka letak yang berbeza daripada .sidebar:not(:has(nav)). Reka letak bersyarat tanpa JavaScript: kewujudan atau ketiadaan anak tertentu memacu reka letak induk, lalu membolehkan CSS yang benar-benar adaptif dan peka terhadap kandungan.

Pertimbangan Prestasi

:has() dengan pemilih argumen yang luas (contohnya, :has(*)) boleh menjadi mahal — pelayar perlu menyemak setiap elemen. Pastikan argumen :has() khusus. Utamakan :has(> .specific-child) (anak langsung) berbanding :has(.specific-child) (mana-mana turunan) apabila boleh.

Sokongan Pelayar

:has() disokong dalam Chrome 105+, Safari 15.4+ dan Firefox 121+. Sokongan garis dasar penuh tersedia sejak penghujung 2023. Tiada polifil wujud (ia memerlukan JavaScript untuk membuat simulasi) — gunakan ciri ini dengan peningkatan berperingkat dalam pelayar lama apabila ciri tersebut tidak kritikal.

Menggantikan Corak JavaScript

Corak yang sebelum ini memerlukan pendengar peristiwa JS: "menambah kelas pada induk apabila anak menerima fokus", "menunjukkan tindanan apabila pencetus modal wujud", dan "menggayakan grid secara berbeza apabila grid mempunyai tepat tiga item". :has() mengendalikan semuanya secara deklaratif.

Semakan Pengetahuan

Apakah yang menjadikan :has() unik berbanding penggabung CSS sedia ada seperti + dan ~?

Ringkasan

:has() ialah kelas pseudo hubungan sebenar pertama CSS yang membolehkan pemilihan induk dan elemen saudara yang terdahulu. Ia menyokong penggayaan dipacu kandungan, tindak balas terhadap keadaan borang, penyerlahan navigasi dan banyak corak yang sebelum ini memerlukan manipulasi DOM oleh JavaScript — semuanya secara deklaratif dalam CSS.

Percuma untuk bermula

Pelajari CSS dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
40
Pelajaran
159

Soalan Lazim

Adakah pelajaran “Pseudo-kelas Hubungan :has()” percuma?

Ya — teks penuh “Pseudo-kelas Hubungan :has()” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus CSS Academy, tingkat taraf kepada CoddyKit PRO. Kursus CSS Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Pseudo-kelas Hubungan :has()”?

Pilih elemen induk berdasarkan anaknya menggunakan pseudo-kelas hubungan :has() yang berkuasa. Anda berlatih CSS Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan CSS Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran CSS Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.

Berapa lamakah pelajaran “Pseudo-kelas Hubungan :has()” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran CSS Academy ini?

Ya. Setiap pelajaran CSS Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Penyarangan CSS Asli
  2. Pseudo-kelas Hubungan :has()
  3. @scope untuk Gaya Berskop
  4. API Peralihan Paparan
← Kembali ke CSS Academy