Hej alle jer vidunderlige udviklere derude! I dette indlæg skal vi udforske brugen af :has()
i dit næste webprojekt. :has()
er relativt ny, men har vundet popularitet i frontend-fællesskabet ved at levere kontrol over forskellige elementer i din brugergrænseflade. Lad os tage et kig på, hvad pseudoklassen er, og hvordan vi kan bruge den.
Syntaks
:has()
CSS pseudo-klasse hjælper med at style et element, hvis nogen af de ting, vi søger efter inde i det, er fundet og taget højde for. Det er som at sige, "Hvis der er noget specifikt inde i denne boks, så stil boksen på denne måde OG kun på denne måde."
:has(<direct-selector>) {
/* ... */
}
Stylingproblemet
I tidligere år havde vi ingen mulighed for at style et overordnet element baseret på et direkte underordnet af denne forælder med CSS eller et element baseret på et andet element. I den chance, vi havde for at gøre det, skulle vi bruge noget JavaScript og slå klasser til/fra baseret på HTML-strukturen. :has()
løst det problem.
Lad os sige, at du har et overskriftsniveau 1-element (h1
) det er titlen på et indlæg eller noget i den stil på en bloglisteside, og så har du en overskrift niveau 2 (h2
), der følger direkte efter den. Denne h2 kunne være en underoverskrift til stillingen. Hvis det h2
er til stede, vigtig og direkte efter h1
, vil du måske få den h1 til at skille sig ud. Før skulle du have skrevet en JS-funktion.
Old School Way – JavaScript
const h1Elements = document.querySelectorAll('h1');
h1Elements.forEach((h1) => {
const h2Sibling = h1.nextElementSibling;
if (h2Sibling && h2Sibling.tagName.toLowerCase() === 'h2') {
h1.classList.add('highlight-content');
}
});
Denne JS-funktion leder efter alle de h1'er, der har en h2
fortsætter det, og anvender en klasse af highlight-indhold for at lave h1
fremstår som en vigtig artikel.
Nyt og forbedret med moderne CSS på vej! Mulighederne for, hvad vi kan gøre i browseren, er nået langt. Vi kan nu drage fordel af CSS til at gøre ting, som vi traditionelt ville have at gøre med JavaScript, ikke alt, men nogle ting.
New School Way – CSS
h1:has(+ h2) {
color: blue;
}
Smid nogle :har() på det!
Nu kan du bruge :has()
at opnå det samme, som JS-funktionen gjorde. Denne CSS tjekker for enhver h1 og bruger søskendekombinator kontrollere for en h2, der umiddelbart følger den, og tilføjer farven blå til teksten. Nedenfor er et par eksempler på brug af hvornår :has()
kan komme godt med.
:har vælgereksempel 1
HTML
<h1>Lorem, ipsum dolor.</h1>
<h2>Lorem ipsum dolor sit amet.</h2>
<p>Lorem, ipsum dolor sit amet consectetur adipisicing elit. Eius, odio voluptatibus est vero iste ad?</p>
<h1>Lorem, ipsum dolor.</h1>
<h2>Lorem ipsum dolor sit amet.</h2>
<p>Lorem, ipsum dolor sit amet consectetur adipisicing elit. Eius, odio voluptatibus est vero iste ad?</p>
<h1>This is a test</h1>
<p>Lorem, ipsum dolor sit amet consectetur adipisicing elit. Eius, odio voluptatibus est vero iste ad?</p>
CSS
h1:has(+ h2) {
color: blue;
}
:har vælgereksempel 2
Mange gange manipulerer eller arbejder vi som arbejdere på nettet med billeder. Det kunne vi godt bruge værktøjer til Cloudinary giver mulighed for at gøre brug af forskellige transformationer på vores billeder, men normalt vil vi tilføje skygger, border-radii og billedtekster (ikke at forveksle med alternativ tekst i en alt-attribut).
Eksemplet nedenfor bruger :has()
for at se, om en figur eller et billede har et figcaption-element, og hvis det gør, anvender det noget baggrund og en kantradius for at få billedet til at skille sig ud.
HTML
<section>
<figure>
<img src="https://placedog.net/500/280" alt="My aunt sally's dog is a golden retreiver." />
<figcaption>My Aunt Sally's Doggo</figcaption>
</figure>
</section>
CSS
figure:has(figcaption) {
background: #c3baba;
padding: 0.6rem;
max-width: 50%;
border-radius: 5px;
}
:has()
det?
Kan jeg Det kan du se :has()
har stor support på tværs af moderne browsere.
Denne browserunderstøttelsesdata er fra Kan jeg bruge, som har flere detaljer. Et tal angiver, at browseren understøtter funktionen fra den pågældende version og opefter.
desktop
Chrome | Firefox | IE | Edge | Safari |
---|---|---|---|---|
105 | 121 | Ingen | 105 | 15.4 |
Mobil / tablet
Android Chrome | Android Firefox | Android | iOS Safari |
---|---|---|---|
122 | 123 | 122 | 15.4 |
:has()
i fællesskabet!
Jeg kontaktede mit netværk på Twitter for at se, hvordan mine jævnaldrende brugte :has()
i deres daglige arbejde, og det er, hvad de havde at sige om det.
svg:has(> #Mail) {
stroke-width: 1;
}
Det er fantastisk at se, hvordan fællesskabsmedlemmer bruger moderne CSS til at løse problemer i den virkelige verden, og også et råb til Abbey, der bruger det af tilgængelighedsgrunde!
Ting at huske på
Der er et par vigtige punkter, du skal huske på, når du bruger :has()
Punkttegn refereret fra MDN.
- Pseudoklassen påtager sig specificiteten af den mest specifikke vælger i sin argumentation
- Hvis
:has()
pseudo-klassen i sig selv er ikke understøttet i en browser, hele vælgerblokken vil mislykkes, medmindre:has()
er på en tilgivende vælgerliste, som f.eks:is()
,:where()
-
:has()
pseudo-klasse kan ikke indlejres i en anden:has()
- Pseudo-elementer er heller ikke gyldige vælgere indenfor
:has()
og pseudo-elementer er ikke gyldige ankre for:has()
Konklusion
Udnyttelse af kraften i CSS, herunder avancerede funktioner som :has()
pseudo-klasse, giver os mulighed for at skabe exceptionelle weboplevelser. CSS's styrker ligger i dens kaskade og specificitet ... den bedste del, der giver os mulighed for at udnytte dets fulde potentiale. Ved at omfavne CSS's muligheder kan vi drive webdesign og udvikling fremad, frigøre nye muligheder og skabe banebrydende brugergrænseflader.
Links:
- SEO Powered Content & PR Distribution. Bliv forstærket i dag.
- PlatoData.Network Vertical Generative Ai. Styrk dig selv. Adgang her.
- PlatoAiStream. Web3 intelligens. Viden forstærket. Adgang her.
- PlatoESG. Kulstof, CleanTech, Energi, Miljø, Solenergi, Affaldshåndtering. Adgang her.
- PlatoHealth. Bioteknologiske og kliniske forsøgs intelligens. Adgang her.
- Kilde: https://css-tricks.com/the-power-of-has-in-css/
- :har
- :er
- :ikke
- $OP
- 09
- 1
- 11
- 12
- 13
- 16
- 22
- 27
- 31
- 3.
- 7
- 8
- 9
- 91
- 98
- a
- Om
- om det
- tilgængelighed
- tegnede
- opnå
- tværs
- Ad
- tilføje
- Tilføjer
- fremskreden
- Fordel
- Efter
- mod
- Alle
- tillade
- også
- alternativ
- an
- forankret
- ,
- android
- En anden
- enhver
- gælder
- Anvendelse
- ER
- argument
- artikel
- AS
- At
- baggrund
- baseret
- BE
- fordi
- før
- jf. nedenstående
- BEDSTE
- Bloker
- Blog
- Blå
- grænse
- Boks
- browser
- browsere
- Bygning
- men
- by
- CAN
- kan ikke
- kapaciteter
- billedtekster
- vandfald
- tilfælde
- chance
- kontrol
- barn
- Chrome
- klasse
- klasser
- farve
- Kom
- kommer
- samfund
- konklusion
- forvirret
- kontrol
- kunne
- Par
- håndværk
- Oprettelse af
- CSS
- data
- dag
- dag til dag
- leverer
- Design
- detail
- opdage
- udviklere
- Udvikling
- DID
- direkte
- direkte
- do
- dokumentet
- gør
- Dog
- køre
- Drop
- Edge
- element
- elementer
- omfavne
- bemyndiger
- ende
- Hele
- at alt
- eksempel
- enestående
- Oplevelser
- forklaring
- udforske
- FAIL
- Feature
- Funktionalitet
- få
- Figur
- Finde
- Firefox
- efter
- følger
- mad
- Til
- Videresend
- fundet
- fra
- forsiden
- forreste ende
- fuld
- funktion
- funktionel
- funktionalitet
- vundet
- gå
- Golden
- stor
- banebrydende
- havde
- praktisk
- Have
- Overskrift
- hjælper
- Høj
- fremhæve
- Hvordan
- HTML
- http
- HTTPS
- i
- ie
- if
- billede
- billeder
- straks
- vigtigt
- forbedret
- in
- Herunder
- angiver
- indvendig
- grænseflader
- ind
- iOS
- IT
- ITS
- selv
- JavaScript
- Holde
- Nøgle
- Efternavn
- mindst
- Niveau
- Leverage
- ligge
- ligesom
- Liste
- Lang
- Se
- leder
- Lot
- lave
- manipulere
- Match
- max-bredde
- Medlemmer
- måske
- tankerne
- Moderne
- mere
- mest
- Mozilla
- my
- Natur
- Behov
- behov
- netværk
- Ny
- næste
- ingen
- nu
- nummer
- of
- on
- ONE
- kun
- or
- vores
- ud
- i løbet af
- pakke
- side
- del
- part
- Bestået
- forbi
- peers
- plato
- Platon Data Intelligence
- PlatoData
- punkter
- popularitet
- muligheder
- Indlæg
- potentiale
- magt
- præsentere
- gaver
- tidligere
- Problem
- problemer
- projekt
- giver
- nået
- ægte
- virkelige verden
- henvisningen
- refereres
- relative
- relativt
- repræsenterer
- respekt
- robust
- s
- Safari
- Sikkerhed
- samme
- siger
- siger
- Skole
- søgning
- se
- udvælgelse
- sidde
- So
- løsninger
- SOLVE
- nogle
- noget
- specifikke
- specificitet
- stå
- Stater
- styrker
- struktur
- stil
- sådan
- support
- Understøttet
- Understøtter
- SVG
- syntaks
- Tag
- tager
- tager
- Teknologier
- tekst
- at
- deres
- derefter
- de
- ting
- ting
- denne
- tid
- gange
- Titel
- til
- værktøjer
- traditionelt
- transformationer
- træ
- sand
- Drejning
- ui
- medmindre
- oplåsning
- us
- brug
- anvendte
- Bruger
- ved brug af
- sædvanligvis
- udnytte
- gyldig
- forskellige
- udgave
- Specifikation
- vs
- ønsker
- var
- Vej..
- we
- web
- var
- Hvad
- hvornår
- som
- vilje
- med
- inden for
- vidunderlig
- Arbejde
- arbejdere
- arbejder
- world
- ville
- skriver
- år
- endnu
- Du
- Din
- zephyrnet