


Bagaimana :has() Pseudo-Class Menghapuskan Keperluan untuk Hacks JavaScript dalam CSS
Ingat masa anda perlu menggayakan elemen induk berdasarkan anak-anaknya, dan anda akhirnya menulis sekumpulan JavaScript hanya untuk menambah kelas mudah? Nah, hari-hari itu akhirnya di belakang kita! Kelas pseudo CSS :has() ada di sini untuk menyelamatkan hari, menukar permainan untuk pembangun bahagian hadapan di mana-mana sahaja.
Apa Yang Kecoh :has()?
Fikirkan :has() sebagai bola kristal CSS anda – ia membolehkan anda melihat ke dalam elemen untuk menyemak kandungannya. Ingin menggayakan div secara berbeza apabila ia mempunyai imej di dalamnya? Ia semudah menulis div:has(> img). Tiada JavaScript diperlukan!
/* This targets any div that contains an image */ div:has(img) { padding: 1rem; background: #f5f5f5; } /* This one's more specific - only direct children */ div:has(> img) { border: 2px solid #ddd; }
Kebanyakan penyemak imbas moden kini menyokong :has(), walaupun pengguna Internet Explorer (jika anda masih perlu menyokongnya) memerlukan sandaran. Tetapi jangan biarkan perkara itu menghalang anda – peningkatan progresif adalah rakan anda di sini!
Cara Lama lwn Kehangatan Baru
Mari kita bincangkan beberapa senario biasa yang pernah membuatkan kita gila. Ingat ini?
Tarian Pengesahan Medan Borang
Cara Lama:
const formGroup = document.querySelector('.form-group'); const input = formGroup.querySelector('input'); input.addEventListener('invalid', () => { formGroup.classList.add('has-error'); });
Cara Baharu:
.form-group:has(input:invalid) { border-color: red; background: #fff8f8; }
Tiada lagi pendengar acara atau togol kelas – hanya CSS perisytiharan tulen. Cantik kan?
Pengubahsuaian Menu Jatuh Turun
Kami semua pernah ke sana – cuba menggayakan bekas lungsur apabila menunya dibuka. Sebelum ini, anda memerlukan JavaScript untuk menogol kelas ke atas dan ke bawah pepohon DOM.
Pendekatan JavaScript Lama:
const dropdown = document.querySelector('.dropdown'); const menu = dropdown.querySelector('.menu'); menu.addEventListener('click', () => { dropdown.classList.toggle('is-open'); });
Pendekatan CSS Baharu:
.dropdown:has(.menu:focus-within) { background: #f0f0f0; box-shadow: 0 2px 4px rgba(0,0,0,0.1); }
Helah Sihir Dunia Sebenar dengan :has()
Mari kita lihat beberapa contoh praktikal di mana :has() benar-benar bersinar:
1. Galeri Imej Pintar
Mahu galeri anda melaraskan reka letaknya berdasarkan jenis kandungan yang terkandung di dalamnya? Peasy mudah!
.gallery:has(img) { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); } .gallery:has(video) { display: flex; flex-direction: column; }
Anda boleh menyepadukan pautan ke artikel Medium ke dalam artikel baharu anda dengan menggunakannya sebagai rujukan, petikan atau sumber inspirasi. Begini cara anda boleh memasukkannya dengan berkesan:
Borang interaktif, menu lungsur turun dan pengurusan negeri adik-beradik hanyalah beberapa contoh tempat CSS kini menerajui. Seperti yang dinyatakan dalam karya Medium yang berwawasan ini, teknik moden seperti :has() membenarkan CSS mengurus tugasan ini secara langsung tanpa bergantung pada JavaScript.
2. Borang Ketergantungan Medan
Perlu menyerlahkan keseluruhan bahagian apabila kotak pilihan ditandakan? Tiada masalah!
.section:has(input[type="checkbox"]:checked) { background: #e8f4ff; padding: 1rem; border-radius: 4px; }
3. Pengendalian Negeri Kosong
Ingin menunjukkan mesej apabila bekas kosong? :has() telah mendapat sokongan anda:
/* This targets any div that contains an image */ div:has(img) { padding: 1rem; background: #f5f5f5; } /* This one's more specific - only direct children */ div:has(> img) { border: 2px solid #ddd; }
Kemenangan Prestasi
Berikut ialah perkara tentang menggunakan :has() dan bukannya JavaScript: ia bukan hanya tentang menulis kurang kod. Halaman anda sebenarnya akan berprestasi lebih baik kerana:
- Enjin gaya penyemak imbas mengendalikan semua kerja secara asli
- Tiada overhed pelaksanaan JavaScript
- Tiada susun atur yang meronta-ronta daripada penambahan/penyingkiran kelas berterusan
- Kurang pendengar acara menyumbat halaman anda
Amalan Terbaik dan Gotchas
Walaupun :has() hebat, terdapat beberapa perkara yang perlu diingat:
Pastikan ia mudah
Jangan berlebihan dengan pemilih yang kompleks. Hanya kerana anda boleh menulis div:has(> span:has(> img)):has( p) tidak bermakna anda patut!Peningkatan Progresif
Sentiasa mempunyai sandaran yang wajar untuk penyemak imbas yang tidak menyokong :has():
const formGroup = document.querySelector('.form-group'); const input = formGroup.querySelector('input'); input.addEventListener('invalid', () => { formGroup.classList.add('has-error'); });
- Pertimbangan Prestasi Walaupun :has() biasanya berprestasi, pemilih yang sangat kompleks masih boleh memberi kesan kepada pemaparan. Pantau panel prestasi DevTools anda jika anda menggunakannya secara meluas.
Membungkus
Kelas pseudo :has() bukan sekadar ciri CSS baharu – ia merupakan anjakan paradigma dalam cara kami mengendalikan perhubungan ibu bapa-anak dalam helaian gaya kami. Ia membantu kami menulis kod yang lebih boleh diselenggara, meningkatkan prestasi dan yang paling penting, ia membolehkan CSS melakukan perkara terbaik yang CSS: mengendalikan penggayaan secara deklaratif.
Jadi pada masa akan datang anda mencapai JavaScript untuk menogol kelas pada elemen induk, ingat: mungkin terdapat penyelesaian yang lebih mudah dan elegan dengan :has(). Cubalah – kod anda (dan pengguna anda) akan berterima kasih!
Ingat, sementara sokongan penyemak imbas baik dan semakin baik, sentiasa semak caniuse.com untuk mendapatkan maklumat keserasian terkini. Dan jangan takut untuk mencuba – begitulah cara kita semua belajar dan berkembang sebagai pembangun!
Atas ialah kandungan terperinci Bagaimana :has() Pseudo-Class Menghapuskan Keperluan untuk Hacks JavaScript dalam CSS. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











Mari kita cuba menyusun istilah di sini: "Penyedia Borang Statik." Anda membawa html anda

Pada permulaan projek baru, kompilasi SASS berlaku dalam sekejap mata. Ini terasa hebat, terutamanya apabila ia dipasangkan dengan BrowserSync, yang dimuat semula

Pada minggu ini, berita platform, Chrome memperkenalkan atribut baru untuk memuatkan, spesifikasi aksesibiliti untuk pemaju web, dan gerakan BBC

Ini saya melihat elemen HTML untuk kali pertama. Saya telah menyedarinya untuk seketika, tetapi Haven ' t mengambilnya untuk putaran lagi. Ia mempunyai cukup keren dan

Beli atau Membina adalah perdebatan klasik dalam teknologi. Membina barang sendiri mungkin berasa lebih murah kerana tidak ada item baris pada bil kad kredit anda, tetapi

Pada minggu ini, roundup, sebuah bookmarklet yang berguna untuk memeriksa tipografi, menggunakan menunggu untuk mengamuk dengan cara modul JavaScript mengimport satu sama lain, ditambah Facebook ' s

Untuk sementara waktu, iTunes adalah anjing besar dalam podcasting, jadi jika anda mengaitkan "Langgan Podcast" untuk suka:

Terdapat banyak platform analisis untuk membantu anda mengesan data pelawat dan penggunaan di laman web anda. Mungkin paling penting Google Analytics, yang digunakan secara meluas
