Ciao a tutti voi, meravigliosi sviluppatori là fuori! In questo post esploreremo l'uso di :has()
nel tuo prossimo progetto web. :has()
è relativamente nuovo ma ha guadagnato popolarità nella comunità front-end offrendo il controllo su vari elementi nell'interfaccia utente. Diamo un'occhiata a cos'è la pseudoclasse e come possiamo utilizzarla.
Sintassi
I :has()
La pseudo-classe CSS aiuta a definire lo stile di un elemento se una qualsiasi delle cose che stiamo cercando al suo interno viene trovata e contabilizzata. È come dire "Se c'è qualcosa di specifico all'interno di questa scatola, allora modellala in questo modo E solo in questo modo."
:has(<direct-selector>) {
/* ... */
}
Il problema dello stile
Negli anni passati non avevamo modo di definire uno stile per un elemento genitore basato su un figlio diretto di quel genitore con CSS o un elemento basato su un altro elemento. Se dovessimo farlo, dovremmo utilizzare alcuni JavaScript e attivare/disattivare le classi in base alla struttura dell'HTML. :has()
risolto quel problema.
Supponiamo che tu abbia un elemento di livello 1 dell'intestazione (h1
) ovvero il titolo di un post o qualcosa del genere nella pagina di un elenco di blog e quindi hai un'intestazione di livello 2 (h2
) che lo segue direttamente. Questo h2 potrebbe essere un sottotitolo per il post. Se quello h2
è presente, importante e direttamente dopo il h1
, potresti voler far risaltare h1. Prima avresti dovuto scrivere una funzione JS.
Stile vecchia scuola – JavaScript
const h1Elements = document.querySelectorAll('h1');
h1Elements.forEach((h1) => {
const h2Sibling = h1.nextElementSibling;
if (h2Sibling && h2Sibling.tagName.toLowerCase() === 'h2') {
h1.classList.add('highlight-content');
}
});
Questa funzione JS cerca tutti gli h1 che hanno un file h2
procedendo e applicando una classe di contenuti evidenziati per creare il file h1
distinguersi come un articolo importante.
Nuovo e migliorato con i moderni CSS in arrivo! Le capacità di ciò che possiamo fare nel browser hanno fatto molta strada. Ora possiamo sfruttare i CSS per fare cose che tradizionalmente dovremmo fare con JavaScript, non tutto, ma alcune cose.
Nuovo modo di scuola – CSS
h1:has(+ h2) {
color: blue;
}
Mettici sopra un po' di :has()!
Ora puoi usare :has()
per ottenere la stessa cosa ottenuta dalla funzione JS. Questo CSS verifica la presenza di qualsiasi h1 e utilizza il file combinatore fratello controllando la presenza di un h2 che lo segue immediatamente e aggiunge il colore blu al testo. Di seguito sono riportati un paio di casi d'uso di quando :has()
può tornare utile.
:ha il selettore Esempio 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;
}
:ha il selettore Esempio 2
Molte volte noi, come lavoratori del web, manipoliamo o lavoriamo con le immagini. Potremmo usare strumenti che Nuvoloso consente di utilizzare varie trasformazioni sulle nostre immagini, ma di solito vogliamo aggiungere ombre esterne, raggi del bordo e didascalie (da non confondere con il testo alternativo in un attributo alt).
L'esempio seguente sta usando :has()
per vedere se una figura o un'immagine ha un elemento figcaption e, in tal caso, applica uno sfondo e un raggio del bordo per far risaltare l'immagine.
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()
che?
Posso Potete vederlo :has()
ha un ottimo supporto su tutti i browser moderni.
Questi dati di supporto del browser provengono da Posso usare, che ha più dettagli. Un numero indica che il browser supporta la funzione a quella versione e successive.
Desktop
Chrome | Firefox | IE | bordo | Safari |
---|---|---|---|---|
105 | 121 | Non | 105 | 15.4 |
Cellulare/Tablet
Android Chrome | Android Firefox | Android | iOS Safari |
---|---|---|---|
122 | 123 | 122 | 15.4 |
:has()
nella comunità!
Ho contattato la mia rete su Twitter per vedere come stavano utilizzando i miei colleghi :has()
nel loro lavoro quotidiano e questo è ciò che hanno da dire al riguardo.
svg:has(> #Mail) {
stroke-width: 1;
}
È bello vedere come i membri della comunità utilizzano i moderni CSS per risolvere i problemi del mondo reale, e anche un ringraziamento ad Abbey che li utilizza per motivi di accessibilità!
Cose da tenere in mente
Ci sono alcuni punti chiave da tenere a mente durante l'utilizzo :has()
Punti elenco a cui si fa riferimento MDN.
- La pseudo-classe assume la specificità del selettore più specifico nel suo argomento
- Se l'
:has()
la pseudo-classe stessa non è supportata in un browser, l'intero blocco selettore fallirà a meno che:has()
si trova in un elenco di selezione indulgente, come in:is()
ed:where()
- I
:has()
la pseudo-classe non può essere annidata all'interno di un'altra:has()
- Anche gli pseudo-elementi non sono selettori validi all'interno
:has()
e gli pseudo-elementi non sono ancore valide per:has()
Conclusione
Sfruttare la potenza dei CSS, comprese funzionalità avanzate come :has()
pseudo-classe, ci consente di creare esperienze web eccezionali. I punti di forza dei CSS risiedono nella sua cascata e specificità... la parte migliore, che ci consente di sfruttare tutto il suo potenziale. Abbracciando le funzionalità dei CSS, possiamo portare avanti la progettazione e lo sviluppo web, sbloccando nuove possibilità e creando interfacce utente rivoluzionarie.
Collegamento:
- Distribuzione di contenuti basati su SEO e PR. Ricevi amplificazione oggi.
- PlatoData.Network Generativo verticale Ai. Potenzia te stesso. Accedi qui.
- PlatoAiStream. Intelligenza Web3. Conoscenza amplificata. Accedi qui.
- PlatoneESG. Carbonio, Tecnologia pulita, Energia, Ambiente, Solare, Gestione dei rifiuti. Accedi qui.
- Platone Salute. Intelligence sulle biotecnologie e sulle sperimentazioni cliniche. Accedi qui.
- Fonte: https://css-tricks.com/the-power-of-has-in-css/
- :ha
- :È
- :non
- $ SU
- 09
- 1
- 11
- 12
- 13
- 16
- 22
- 27
- 31
- 3rd
- 7
- 8
- 9
- 91
- 98
- a
- Chi siamo
- a proposito
- accessibilità
- contabilizzati
- Raggiungere
- operanti in
- Ad
- aggiungere
- Aggiunge
- Avanzate
- Vantaggio
- Dopo shavasana, sedersi in silenzio; saluti;
- contro
- Tutti
- Consentire
- anche
- alternativa
- an
- ancorato
- ed
- androide
- Un altro
- in qualsiasi
- si applica
- AMMISSIONE
- SONO
- argomento
- articolo
- AS
- At
- sfondo
- basato
- BE
- perché
- prima
- sotto
- MIGLIORE
- Bloccare
- Blog
- Blu
- sistema
- Scatola
- del browser
- browser
- Costruzione
- ma
- by
- Materiale
- non può
- funzionalità
- didascalie
- cascata
- casi
- possibilità
- verifica
- bambino
- Chrome
- classe
- classi
- colore
- Venire
- arrivo
- comunità
- conclusione
- confuso
- di controllo
- potuto
- Coppia
- artigianali
- Creazione
- CSS
- dati
- giorno
- giorno per giorno
- consegna
- Design
- dettaglio
- individuare
- sviluppatori
- Mercato
- DID
- dirette
- direttamente
- do
- documento
- effettua
- Cane
- guidare
- Cadere
- bordo
- elemento
- elementi
- abbracciando
- Potenzia
- fine
- Intero
- qualunque cosa
- esempio
- eccezionale
- Esperienze
- spiegazione
- esplora
- FAIL
- caratteristica
- Caratteristiche
- pochi
- figura
- Trovare
- Firefox
- i seguenti
- segue
- cibo
- Nel
- Avanti
- essere trovato
- da
- anteriore
- Fine frontale
- pieno
- function
- funzionale
- funzionalità
- guadagnato
- andando
- d'oro
- grande
- innovativo
- ha avuto
- a portata di mano
- Avere
- Titolo
- aiuta
- Alta
- mettendo in evidenza
- Come
- HTML
- http
- HTTPS
- i
- ie
- if
- Immagine
- immagini
- subito
- importante
- migliorata
- in
- Compreso
- indica
- interno
- interfacce
- ai miglioramenti
- iOS
- IT
- SUO
- stessa
- JavaScript
- mantenere
- Le
- Cognome
- meno
- Livello
- Leva
- Bugia
- piace
- Lista
- Lunghi
- Guarda
- cerca
- lotto
- make
- manipolazione
- partita
- max-width
- Utenti
- forza
- mente
- moderno
- Scopri di più
- maggior parte
- Mozilla
- my
- Natura
- Bisogno
- di applicazione
- Rete
- New
- GENERAZIONE
- no
- adesso
- numero
- of
- on
- ONE
- esclusivamente
- or
- nostro
- su
- ancora
- pacchetto
- pagina
- parte
- partito
- Passato
- passato
- coetanei
- Platone
- Platone Data Intelligence
- PlatoneDati
- punti
- popolarità
- possibilità
- Post
- potenziale
- energia
- presenti
- regali
- precedente
- Problema
- problemi
- progetto
- fornisce
- a raggiunto
- di rose
- mondo reale
- riferimento
- riferimento
- parente
- relativamente
- rappresenta
- rispetto
- robusto
- s
- Safari
- Sicurezza
- stesso
- dire
- detto
- di moto
- ricerca
- vedere
- Selezione
- sedere
- So
- soluzione
- RISOLVERE
- alcuni
- qualcosa
- specifico
- specificità
- stare in piedi
- stati
- punti di forza
- La struttura
- style
- tale
- supporto
- supportato
- supporti
- SVG
- sintassi
- Fai
- prende
- presa
- Tecnologie
- testo
- che
- I
- loro
- poi
- di
- cosa
- cose
- questo
- tempo
- volte
- Titolo
- a
- strumenti
- tradizionalmente
- trasformazioni
- albero
- vero
- Svolta
- ui
- salvo che
- sblocco
- us
- uso
- utilizzato
- Utente
- utilizzando
- generalmente
- utilizzare
- un valido
- vario
- versione
- Visualizza
- vs
- volere
- Prima
- Modo..
- we
- sito web
- sono stati
- Che
- quando
- quale
- volere
- con
- entro
- meraviglioso
- Lavora
- lavoratori
- lavoro
- mondo
- sarebbe
- scrivere
- anni
- ancora
- Tu
- Trasferimento da aeroporto a Sharm
- zefiro