Eesti

Avastage CSS-i :has() selektor, mis muudab vanem-elemendi valiku mängureegleid. Õppige praktilisi rakendusi, brauseriteülest ühilduvust ja täiustatud tehnikaid oma CSS-stiilide revolutsiooniliseks muutmiseks.

CSS :has() selektori meisterlik valdamine: Vanem-elemendi valiku võimsuse avamine

Aastaid on CSS-i arendajad igatsenud lihtsat ja tõhusat viisi vanem-elementide valimiseks nende laste alusel. Ootus on lõppenud! :has() pseudoklass on lõpuks kohal ja see muudab revolutsiooniliselt meie CSS-i kirjutamise viisi. See võimas selektor võimaldab teil sihtida vanem-elementi, kui see sisaldab konkreetset laps-elementi, avades dünaamilise ja reageeriva stiilimise jaoks uute võimaluste maailma.

Mis on :has() selektor?

:has() pseudoklass on CSS-i suhteline pseudoklass, mis võtab argumendina vastu selektorite loendi. See valib elemendi, kui mõni selektorite loendis olev selektor vastab vähemalt ühele elemendi järeltulijatest. Lihtsamalt öeldes kontrollib see, kas vanem-elemendil on konkreetne laps, ja kui on, siis valitakse vanem-element.

Põhisüntaks on:

vanem:has(laps) { /* CSS reeglid */ }

See valib vanem-elemendi ainult siis, kui see sisaldab vähemalt ühte laps-elementi.

Miks on :has() nii oluline?

Traditsiooniliselt on CSS-i võimekus valida vanem-elemente nende laste alusel olnud piiratud. See piirang nõudis dünaamilise stiilimise saavutamiseks sageli keerukaid JavaScripti lahendusi või möödahiilimisi. :has() selektor kaotab vajaduse nende tülikate meetodite järele, võimaldades puhtamat, paremini hooldatavat ja jõudlusvõimelisemat CSS-koodi.

Siin on põhjus, miks :has() on mängumuutja:

:has() selektori põhinäited

Alustame mõne lihtsa näitega, et illustreerida :has() selektori võimsust.

Näide 1: Vanem-div'i stiilimine pildi olemasolu alusel

Oletame, et soovite lisada <div> elemendile äärisjoone ainult siis, kui see sisaldab <img> elementi:

div:has(img) { border: 2px solid blue; }

See CSS-reegel rakendab sinise äärisjoone igale <div>-ile, mis sisaldab vähemalt ühte <img> elementi.

Näide 2: Loendi elemendi stiilimine span'i olemasolu alusel

Oletame, et teil on loend ja soovite esile tõsta loendi elementi, kui see sisaldab konkreetse klassiga <span> elementi:

li:has(span.highlight) { background-color: yellow; }

See CSS-reegel muudab iga <li> taustavärvi kollaseks, mis sisaldab klassiga "highlight" <span>-i.

Näide 3: Vormi sildi stiilimine sisendi kehtivuse alusel

Saate kasutada :has()-i, et stiilida vormi silti selle alusel, kas sellega seotud sisendväli on kehtiv või kehtetu (kombineerituna :invalid pseudoklassiga):

label:has(+ input:invalid) { color: red; font-weight: bold; }

See muudab sildi punaseks ja paksuks, kui sellele vahetult järgnev sisendväli on kehtetu.

:has() selektori täiustatud kasutusviisid

:has() selektor muutub veelgi võimsamaks, kui seda kombineerida teiste CSS-selektorite ja pseudoklassidega. Siin on mõned täiustatud kasutusjuhud:

Näide 4: Tühjade elementide sihtimine

Saate kasutada :not() pseudoklassi koos :has()-iga, et sihtida elemente, millel *pole* konkreetset last. Näiteks, et stiilida div'e, mis *ei sisalda* pilte:

div:not(:has(img)) { background-color: #f0f0f0; }

See rakendab helehalli tausta igale <div>-ile, mis ei sisalda <img> elementi.

Näide 5: Keerukate paigutuste loomine

:has() selektorit saab kasutada dünaamiliste paigutuste loomiseks konteineri sisu alusel. Näiteks saate muuta ruudustiku paigutust vastavalt ruudustiku lahtris oleva konkreetse tüüpi elemendi olemasolule.

.grid-container { display: grid; grid-template-columns: repeat(3, 1fr); } .grid-item:has(img) { grid-column: span 2; }

See paneb ruudustiku elemendi ulatuma üle kahe veeru, kui see sisaldab pilti.

Näide 6: Dünaamiline vormi stiilimine

Saate kasutada :has()-i, et dünaamiliselt stiilida vormielemente nende oleku alusel (nt kas need on fookuses, täidetud või kehtivad).

.form-group:has(input:focus) { box-shadow: 0 0 5px rgba(0, 0, 255, 0.5); } .form-group:has(input:valid) { border-color: green; } .form-group:has(input:invalid) { border-color: red; }

See lisab sinise kasti varju, kui sisend on fookuses, rohelise äärise, kui sisend on kehtiv, ja punase äärise, kui sisend on kehtetu.

Näide 7: Stiilimine laste arvu alusel

Kuigi :has() ei loe otse laste arvu, saate seda kombineerida teiste selektorite ja CSS-i omadustega sarnaste efektide saavutamiseks. Näiteks saate kasutada :only-child-i vanema stiilimiseks, kui sellel on ainult üks teatud tüüpi laps.

div:has(> p:only-child) { background-color: lightgreen; }

See stiilib <div>-i helerohelise taustaga ainult siis, kui see sisaldab oma otsese lapsena ühte <p> elementi.

Brauseriteülene ühilduvus ja varulahendused

2023. aasta lõpu seisuga on :has() selektoril suurepärane tugi kaasaegsetes brauserites, sealhulgas Chrome, Firefox, Safari ja Edge. Siiski on ülioluline enne tootmisesse juurutamist kontrollida ühilduvust lehel Can I use, eriti kui peate toetama vanemaid brausereid.

Siin on ülevaade ühilduvuskaalutlustest:

Varulahenduste pakkumine

Kui teil on vaja toetada vanemaid brausereid, peate pakkuma varulahendusi. Siin on mõned strateegiad:

Siin on näide funktsioonipäringu kasutamisest:

.parent { /* Põhistiil kõikidele brauseritele */ border: 1px solid black; } @supports selector(:has(img)) { .parent:has(img) { /* Täiustatud stiil :has()-i toetavatele brauseritele */ border: 3px solid blue; } }

See kood rakendab musta äärise .parent elemendile kõigis brauserites. Brauserites, mis toetavad :has()-i, rakendab see sinise äärise, kui .parent element sisaldab pilti.

Jõudluskaalutlused

Kuigi :has() pakub olulisi eeliseid, on oluline arvestada selle potentsiaalse mõjuga jõudlusele, eriti kui seda kasutatakse laialdaselt või keerukate selektoritega. Brauserid peavad hindama selektorit iga lehel oleva elemendi jaoks, mis võib muutuda arvutuslikult kulukaks.

Siin on mõned näpunäited :has()-i jõudluse optimeerimiseks:

Levinud vead, mida vältida

:has() selektoriga töötades on lihtne teha vigu, mis võivad viia ootamatute tulemusteni. Siin on mõned levinud lõksud, mida vältida:

:has() kasutamise parimad tavad

Et maksimeerida :has() selektori eeliseid ja vältida võimalikke probleeme, järgige neid parimaid tavasid:

Reaalse maailma näited ja kasutusjuhud

Uurime mõningaid reaalse maailma näiteid selle kohta, kuidas :has() selektorit saab kasutada tavaliste disainiprobleemide lahendamiseks.

Näide 8: Reageerivate navigeerimismenüüde loomine

Saate kasutada :has()-i, et luua reageerivaid navigeerimismenüüsid, mis kohanduvad erinevate ekraanisuurustega vastavalt konkreetsete menüüelementide olemasolule.

Kujutage ette stsenaariumi, kus soovite kuvada erinevat navigeerimismenüüd sõltuvalt sellest, kas kasutaja on sisse logitud või mitte. Kui ta on sisse logitud, võite näidata profiili ja väljalogimise toiminguid, kui mitte, siis sisselogimise/registreerimise valikuid.

nav:has(.user-profile) { /* Stiilid sisseloginud kasutajatele */ } nav:not(:has(.user-profile)) { /* Stiilid väljaloginud kasutajatele */ }

Näide 9: Kaardikomponentide stiilimine

:has() selektorit saab kasutada kaardikomponentide stiilimiseks nende sisu alusel. Näiteks saate kaardile varju lisada ainult siis, kui see sisaldab pilti.

.card:has(img) { box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); }

Näide 10: Dünaamiliste teemade rakendamine

Saate kasutada :has()-i dünaamiliste teemade rakendamiseks vastavalt kasutaja eelistustele või süsteemi seadetele. Näiteks saate muuta lehe taustavärvi selle põhjal, kas kasutaja on tumeda režiimi lubanud.

body:has(.dark-mode) { background-color: #333; color: #fff; }

Need näited illustreerivad :has() selektori mitmekülgsust ja selle võimet lahendada laia valikut disainiprobleeme.

CSS-i tulevik: mis edasi?

:has() selektori kasutuselevõtt tähistab olulist sammu edasi CSS-i arengus. See annab arendajatele võimaluse luua dünaamilisemaid, reageerivamaid ja hooldatavamaid stiililehti, vähendades sõltuvust JavaScriptist. Kuna brauserite tugi :has()-ile jätkuvalt kasvab, võime oodata selle võimsa selektori veelgi uuenduslikumaid ja loomingulisemaid kasutusviise.

Tulevikku vaadates uurib CSS-i töörühm muid põnevaid funktsioone ja täiustusi, mis laiendavad veelgi CSS-i võimalusi. Nende hulka kuuluvad:

Hoides end kursis viimaste CSS-i arengutega ja võttes omaks uusi funktsioone nagu :has(), saavad arendajad avada CSS-i täieliku potentsiaali ja luua tõeliselt erakordseid veebikogemusi.

Kokkuvõte

:has() selektor on võimas täiendus CSS-i tööriistakasti, võimaldades vanem-elemendi valikut ja avades uusi võimalusi dünaamiliseks ja reageerivaks stiilimiseks. Kuigi on ülioluline arvestada brauserite ühilduvuse ja jõudluse mõjudega, on :has()-i kasutamise eelised puhtama, paremini hooldatava ja jõudlusvõimelisema CSS-koodi loomisel vaieldamatud. Võtke see mängu muutev selektor omaks ja muutke oma CSS-stiilimine juba täna revolutsiooniliseks!

Pidage meeles arvestada ligipääsetavusega ja pakkuda vanematele brauseritele varumehhanisme. Järgides selles juhendis toodud parimaid tavasid, saate kasutada :has() selektori täielikku potentsiaali ja luua tõeliselt erakordseid veebikogemusi kasutajatele üle kogu maailma.