cari
Rumahhujung hadapan webtutorial cssBagaimana :has() Pseudo-Class Menghapuskan Keperluan untuk Hacks JavaScript dalam CSS

How :has() Pseudo-Class Eliminates the Need for JavaScript Hacks in 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:

  1. Enjin gaya penyemak imbas mengendalikan semua kerja secara asli
  2. Tiada overhed pelaksanaan JavaScript
  3. Tiada susun atur yang meronta-ronta daripada penambahan/penyingkiran kelas berterusan
  4. Kurang pendengar acara menyumbat halaman anda

Amalan Terbaik dan Gotchas

Walaupun :has() hebat, terdapat beberapa perkara yang perlu diingat:

  1. 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!

  2. 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');
});
  1. 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!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Menambah bayang -bayang kotak ke blok dan elemen WordPressMenambah bayang -bayang kotak ke blok dan elemen WordPressMar 09, 2025 pm 12:53 PM

CSS box-shadow dan garis besar sifat mendapat tema.json Sokongan dalam WordPress 6.1. Let ' s melihat beberapa contoh bagaimana ia berfungsi dalam tema sebenar, dan pilihan apa yang kita perlu gunakan gaya ini ke blok dan elemen WordPress.

Buat borang hubungan JavaScript dengan rangka kerja pintarBuat borang hubungan JavaScript dengan rangka kerja pintarMar 07, 2025 am 11:33 AM

Tutorial ini menunjukkan mewujudkan bentuk JavaScript yang berpandangan profesional menggunakan rangka kerja pintar (nota: tidak lagi tersedia). Walaupun kerangka itu sendiri tidak tersedia, prinsip dan teknik tetap relevan untuk pembina bentuk lain.

Pembaca Skrin Demystifying: Borang & Amalan Terbaik DiaksesPembaca Skrin Demystifying: Borang & Amalan Terbaik DiaksesMar 08, 2025 am 09:45 AM

Ini adalah jawatan ke -3 dalam siri kecil yang kami lakukan dalam kebolehcapaian bentuk. Jika anda terlepas jawatan kedua, lihat "Menguruskan Fokus Pengguna dengan: Fokus-Visible". Dalam

Buat editor teks sebaris dengan atribut yang boleh dipertikaikanBuat editor teks sebaris dengan atribut yang boleh dipertikaikanMar 02, 2025 am 09:03 AM

Membina editor teks sebaris tidak remeh. Proses ini bermula dengan membuat elemen sasaran yang boleh diedit, mengendalikan potensi pengecualian syntaxError di sepanjang jalan. Membuat editor anda Untuk membina editor ini, anda perlu mengubahsuai kandungan secara dinamik

Bekerja dengan Caching GraphqlBekerja dengan Caching GraphqlMar 19, 2025 am 09:36 AM

Sekiranya anda baru -baru ini mula bekerja dengan GraphQL, atau mengkaji semula kebaikan dan keburukannya, anda tidak akan ragu -ragu mendengar perkara seperti "Graphql tidak menyokong caching" atau

Menjadikan Peralihan Svelte Khas pertama andaMenjadikan Peralihan Svelte Khas pertama andaMar 15, 2025 am 11:08 AM

API Peralihan Svelte menyediakan cara untuk menghidupkan komponen apabila mereka memasuki atau meninggalkan dokumen, termasuk peralihan svelte adat.

Membandingkan 5 Pembina Borang PHP Terbaik (dan 3 skrip percuma)Membandingkan 5 Pembina Borang PHP Terbaik (dan 3 skrip percuma)Mar 04, 2025 am 10:22 AM

Artikel ini meneroka skrip pembina bentuk PHP teratas yang terdapat di Envato Market, membandingkan ciri -ciri, fleksibiliti, dan reka bentuk mereka. Sebelum menyelam ke dalam pilihan tertentu, mari kita faham apa pembina bentuk PHP dan mengapa anda menggunakannya. Borang PHP

Muat naik fail dengan multer di node.js dan ekspresMuat naik fail dengan multer di node.js dan ekspresMar 02, 2025 am 09:15 AM

Tutorial ini membimbing anda melalui membina sistem muat naik fail menggunakan Node.js, Express, dan Multer. Kami akan merangkumi muat naik fail tunggal dan berganda, dan juga menunjukkan menyimpan imej dalam pangkalan data MongoDB untuk mendapatkan semula kemudian. Pertama, sediakan Projek anda

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular

Dreamweaver Mac版

Dreamweaver Mac版

Alat pembangunan web visual

PhpStorm versi Mac

PhpStorm versi Mac

Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

SecLists

SecLists

SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.