CSS Academy · Les

:has()-relationele pseudoklasse

Selecteer parentelementen op basis van hun children met de krachtige relationele pseudoklasse :has().

Les 2 van 413 stappen

:has()-relationele pseudoklasse is een gratis CSS Academy-les op CoddyKit. Dit is les 2 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject CSS Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus CSS Academy bevat in totaal 4 lessen.

Wat is :has()?

De pseudo-klasse :has() selecteert een element als het een afstammeling bevat die overeenkomt met het argument. Deze wordt vaak de "selector voor het bovenliggende element" genoemd en maakt het mogelijk een bovenliggend element op basis van zijn onderliggende elementen op te maken — een mogelijkheid die CSS eerder niet had.

Basissyntaxis

.card:has(img) selecteert elk .card-element dat een img-afstammeling bevat. Het argument is een lijst met relatieve selectors: elke geldige CSS-selector die elementen beschrijft ten opzichte van het doelelement.

Bovenliggende elementen opmaken

Maak een formuliercontainer op wanneer deze een ongeldige invoer bevat: form:has(:invalid) { border-color: red; }. Maak een sectie op die een kop bevat: section:has(h2) { padding-top: 2rem; }. Het bovenliggende element verandert van uiterlijk op basis van de toestand van het onderliggende element.

Broer- en zusterelementen selecteren

:has() kan voorgaande broer- en zusterelementen selecteren — iets wat + en ~ niet kunnen. h2:has(+ p) selecteert h2-elementen die direct worden gevolgd door p. li:has(~ .active) selecteert li-elementen met een later .active-broer- of -zusterelement.

Stijlen voor de toestand van formulieren

Reageer zonder JavaScript op de ingebouwde geldigheid van formulieren: input:has(~ .error-msg) maakt een invoerveld op dat een foutmelding als broer- of zusterelement heeft. label:has(+ input:required) maakt labels op waarvan het gekoppelde invoerveld verplicht is — allemaal alleen met CSS.

Toestand van navigatie

Markeer navigatiecontainers op basis van een actief onderliggend element: nav:has(.active) past stijlen toe op de volledige navigatie wanneer een onderliggend element de klasse active heeft. Dit is handig om op containerniveau aan te geven welk navigatiegedeelte actief is.

Combineren met andere pseudo-klassen

.grid:has(.card:focus-within) maakt het volledige raster op wanneer een kaart toetsenbordfocus krijgt. .dropdown:has(:hover) houdt een vervolgkeuzemenu geopend zolang de muis zich boven een onderliggend element bevindt — overzichtelijker dan complexe ketens van broer- en zuscombinatoren.

Equivalent van een mediaquery in CSS

.sidebar:has(nav) krijgt een andere lay-out dan .sidebar:not(:has(nav)). Voorwaardelijke lay-out zonder JavaScript: de aan- of afwezigheid van specifieke onderliggende elementen bepaalt de lay-out van het bovenliggende element, waardoor echt adaptieve CSS ontstaat die rekening houdt met de inhoud.

Prestatieoverwegingen

:has() met brede selectors als argument (bijvoorbeeld :has(*)) kan belastend zijn — de browser moet elk element controleren. Houd de argumenten van :has() specifiek. Geef waar mogelijk de voorkeur aan :has(> .specific-child) (direct onderliggend element) boven :has(.specific-child) (elke afstammeling).

Browserondersteuning

:has() wordt ondersteund in Chrome 105+, Safari 15.4+ en Firefox 121+. Volledige standaardondersteuning bestaat sinds eind 2023. Er is geen polyfill beschikbaar (daarvoor zou JavaScript nodig zijn om dit na te bootsen). Gebruik de functie met geleidelijke verbetering in oudere browsers waar deze niet essentieel is.

JavaScript-patronen vervangen

Patronen waarvoor vroeger JavaScript-gebeurtenislisteners nodig waren: "een klasse aan het bovenliggende element toevoegen wanneer het onderliggende element focus krijgt", "een overlay tonen wanneer modal-trigger bestaat", "een raster anders opmaken wanneer het precies drie elementen bevat". :has() handelt al deze patronen declaratief af.

Kennistoets

Wat maakt :has() uniek ten opzichte van bestaande CSS-combinatoren zoals + en ~?

Samenvatting

:has() is de eerste echte relationele pseudo-klasse van CSS en maakt het mogelijk bovenliggende en voorgaande broer- en zusterelementen te selecteren. De functie ondersteunt inhoudgestuurde stijlen, reacties op de toestand van formulieren, markering van navigatie en veel patronen waarvoor eerder JavaScript-manipulatie van de DOM nodig was — allemaal declaratief in CSS.

Gratis beginnen

Leer CSS met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
40
Lessen
159

Veelgestelde vragen

Is de les “:has()-relationele pseudoklasse” gratis?

Ja — de volledige tekst van “:has()-relationele pseudoklasse” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus CSS Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus CSS Academy bevat in totaal 4 lessen.

Wat leer ik in “:has()-relationele pseudoklasse”?

Selecteer parentelementen op basis van hun children met de krachtige relationele pseudoklasse :has(). Je oefent met CSS Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met CSS Academy te beginnen?

Ervaring vooraf is niet nodig. CSS Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.

Hoe lang duurt de les “:has()-relationele pseudoklasse”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over CSS Academy?

Ja. Elke les over CSS Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Native CSS-nesting
  2. :has()-relationele pseudoklasse
  3. @scope voor gescopeerde stijlen
  4. View Transitions API
← Terug naar CSS Academy