Erinnern Sie sich an die Zeiten, als Sie ein übergeordnetes Element basierend auf seinen untergeordneten Elementen formatieren mussten und am Ende eine Menge JavaScript geschrieben haben, nur um eine einfache Klasse hinzuzufügen? Nun, diese Tage liegen endlich hinter uns! Die CSS-Pseudoklasse :has() ist hier, um den Tag zu retten und das Spiel für Front-End-Entwickler überall zu verändern.
Was soll die ganze Aufregung um :has()?
Stellen Sie sich :has() als Ihre CSS-Kristallkugel vor – damit können Sie in Elemente hineinschauen, um zu überprüfen, was sie enthalten. Möchten Sie ein Div anders gestalten, wenn es ein Bild enthält? Es ist so einfach wie das Schreiben von div:has(> img). Es ist kein JavaScript erforderlich!
/* 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; }
Die meisten modernen Browser unterstützen jetzt :has(), obwohl Internet Explorer-Benutzer (falls Sie sie noch unterstützen müssen) einen Ersatz benötigen. Aber lassen Sie sich davon nicht aufhalten – progressive Verbesserung ist hier Ihr Freund!
Die alten Wege vs. die neue Schärfe
Lassen Sie uns über einige häufige Szenarien sprechen, die uns früher in den Wahnsinn getrieben haben. Erinnern Sie sich daran?
Der Formularfeldvalidierungstanz
Der alte Weg:
const formGroup = document.querySelector('.form-group'); const input = formGroup.querySelector('input'); input.addEventListener('invalid', () => { formGroup.classList.add('has-error'); });
Der neue Weg:
.form-group:has(input:invalid) { border-color: red; background: #fff8f8; }
Keine Ereignis-Listener oder Klassenumschaltungen mehr – nur reines, deklaratives CSS. Ist das nicht schön?
Die Überarbeitung des Dropdown-Menüs
Das kennen wir alle schon: Wir haben versucht, einen Dropdown-Container zu formatieren, wenn das Menü geöffnet ist. Bisher benötigten Sie JavaScript, um Klassen im DOM-Baum nach oben und unten zu verschieben.
Alter JavaScript-Ansatz:
const dropdown = document.querySelector('.dropdown'); const menu = dropdown.querySelector('.menu'); menu.addEventListener('click', () => { dropdown.classList.toggle('is-open'); });
Neuer CSS-Ansatz:
.dropdown:has(.menu:focus-within) { background: #f0f0f0; box-shadow: 0 2px 4px rgba(0,0,0,0.1); }
Zaubertricks aus der realen Welt mit :has()
Sehen wir uns einige praktische Beispiele an, bei denen :has() wirklich glänzt:
1. Intelligente Bildergalerien
Möchten Sie, dass das Layout Ihrer Galerie an die Art der darin enthaltenen Inhalte angepasst wird? Kinderleicht!
.gallery:has(img) { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); } .gallery:has(video) { display: flex; flex-direction: column; }
Sie können den Link zum Medium-Artikel in Ihren neuen Artikel integrieren, indem Sie ihn als Referenz, Zitat oder Inspirationsquelle verwenden. So können Sie es effektiv einbinden:
Interaktive Formulare, Dropdown-Menüs und Geschwisterstatusverwaltung sind nur einige Beispiele dafür, wo CSS jetzt die Führung übernimmt. Wie in diesem aufschlussreichen Medium-Artikel erwähnt, ermöglichen moderne Techniken wie :has() CSS, diese Aufgaben direkt zu verwalten, ohne auf JavaScript angewiesen zu sein.
2. Formularfeldabhängigkeiten
Müssen Sie einen ganzen Abschnitt hervorheben, wenn ein Kontrollkästchen aktiviert ist? Kein Problem!
.section:has(input[type="checkbox"]:checked) { background: #e8f4ff; padding: 1rem; border-radius: 4px; }
3. Handhabung leerer Zustände
Möchten Sie eine Nachricht anzeigen, wenn ein Behälter leer ist? :has() steht hinter dir:
/* 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; }
Der Leistungsgewinn
Das Besondere an der Verwendung von :has() anstelle von JavaScript ist, dass es nicht nur darum geht, weniger Code zu schreiben. Ihre Seiten werden tatsächlich eine bessere Leistung erbringen, weil:
- Die Style-Engine des Browsers erledigt die gesamte Arbeit nativ
- Kein JavaScript-Ausführungsaufwand
- Keine Beeinträchtigung des Layouts durch ständige Hinzufügungen/Entfernungen von Klassen
- Weniger Ereignis-Listener verstopfen Ihre Seite
Best Practices und Fallstricke
Während :has() großartig ist, gibt es ein paar Dinge zu beachten:
Keep it Simple
Übertreiben Sie es nicht mit komplexen Selektoren. Nur weil Sie div:has(> span:has(> img)):has( p) schreiben können, heißt das nicht, dass Sie es tun sollten!Progressive Verbesserung
Halten Sie immer einen sinnvollen Fallback für Browser bereit, die :has():
nicht unterstützen
const formGroup = document.querySelector('.form-group'); const input = formGroup.querySelector('input'); input.addEventListener('invalid', () => { formGroup.classList.add('has-error'); });
- Leistungsaspekte Während :has() im Allgemeinen performant ist, können sehr komplexe Selektoren dennoch Auswirkungen auf das Rendering haben. Behalten Sie Ihr DevTools-Leistungsfenster im Auge, wenn Sie es häufig nutzen.
Zusammenfassung
Die Pseudoklasse :has() ist mehr als nur eine neue CSS-Funktion – sie ist ein Paradigmenwechsel in der Art und Weise, wie wir Eltern-Kind-Beziehungen in unseren Stylesheets handhaben. Es hilft uns, besser wartbaren Code zu schreiben, die Leistung zu verbessern und, was am wichtigsten ist, es ermöglicht CSS, das zu tun, was CSS am besten kann: Stile deklarativ zu handhaben.
Wenn Sie also das nächste Mal zu JavaScript greifen, um eine Klasse für ein übergeordnetes Element umzuschalten, denken Sie daran: Möglicherweise gibt es mit :has() eine einfachere und elegantere Lösung. Probieren Sie es aus – Ihr Code (und Ihre Benutzer) werden es Ihnen danken!
Denken Sie daran, dass die Browserunterstützung zwar gut ist und immer besser wird, Sie aber immer auf caniuse.com nach den neuesten Kompatibilitätsinformationen suchen. Und haben Sie keine Angst vor Experimenten – so lernen und wachsen wir alle als Entwickler!
Das obige ist der detaillierte Inhalt vonWie die Pseudoklasse :has() JavaScript-Hacks in CSS überflüssig macht. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Ich habe diese Frage neulich bekommen. Mein erster Gedanke ist: seltsame Frage! Bei der Spezifität geht es um Selektoren, und Rules sind keine Selektoren, also ... irrelevant?

Ja, Sie können, und es ist nicht wirklich wichtig in welcher Reihenfolge. Ein CSS -Präprozessor ist nicht erforderlich. Es funktioniert in regulären CSS.

Sie sollten auf jeden Fall weitausgestellte Cache-Header auf Ihren Vermögenswerten wie CSS und JavaScript (und Bilder und Schriftarten und was auch immer) festlegen. Das sagt dem Browser

Viele Entwickler schreiben darüber, wie sie eine CSS -Codebasis pflegen können, aber nicht viele von ihnen schreiben darüber, wie sie die Qualität dieser Codebasis messen. Sicher, wir haben

Haben Sie jemals ein Formular gehabt, das ein kurzes, willkürliches Stück Text akzeptieren musste? Wie ein Name oder was auch immer. Das ist genau das, wofür es ist. Es gibt viele

Ich bin so aufgeregt, nach Zürich, der Schweiz, zur Frontkonferenz zu gehen (liebe diesen Namen und diese URL!). Ich war noch nie in der Schweiz, also bin ich aufgeregt

Eine meiner Lieblingsentwicklungen in der Softwareentwicklung war das Aufkommen von Serverless. Als Entwickler, der die Tendenz hat, sich in den Details festzuhalten

In diesem Beitrag werden wir eine E -Commerce -Store -Demo verwenden, die ich für Netlify erstellt und bereitgestellt habe, um zu zeigen, wie wir dynamische Routen für eingehende Daten erstellen können. Es ist fair


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Herunterladen der Mac-Version des Atom-Editors
Der beliebteste Open-Source-Editor

MantisBT
Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen