Menu

Selettori CSS: tipi, combinatori e selettori di attributo

Un selettore CSS sceglie gli elementi a cui una regola applica lo stile. Impara tutti i tipi di selettore, i quattro combinatori (discendente, figlio, fratello adiacente, fratello generale), i selettori di attributo, il raggruppamento, e prova i selettori dal vivo.

Questa pagina include editor eseguibili: modifica, esegui e vedi subito l'output.

Cos'è un selettore CSS

Un selettore è la parte di una regola prima delle parentesi graffe. Decide a quali elementi si applicano le dichiarazioni.

p.note { color: #2563eb; }
/* selector: p.note    declaration: color: #2563eb */

I cinque selettori di base coprono la maggior parte dei fogli di stile reali:

I tipi di selettore a colpo d'occhio

SelettoreEsempioSeleziona
Universale*Ogni elemento
TipopOgni <p>
Classe.tipGli elementi con class="tip" (tra le altre)
ID#main-titleL'elemento con id="main-title"
Attributo[type="email"]Gli elementi il cui attributo corrisponde
Pseudo-classea:hover, li:first-childGli elementi in uno stato o in una posizione
Pseudo-elementop::first-line, .x::beforeUna parte di un elemento
Gruppoh1, h2, h3Tutto ciò che corrisponde a uno dell'elenco
Compostop.tipUn <p> che ha anche la classe

Classi e ID hanno una pagina tutta loro, selettore di classe CSS. Le pseudo-classi come :nth-child() e :not() sono trattate nella pagina sulle pseudo-classi.

Combinatori: discendente contro figlio

Un combinatore unisce due selettori in base alla loro relazione nell'albero HTML. Ce ne sono quattro.

CombinatoreSintassiSeleziona B quando
DiscendenteA B (spazio)B si trova ovunque dentro A
FiglioA > BIl genitore di B è A
Fratello adiacenteA + BB viene subito dopo A, stesso genitore
Fratello generaleA ~ BB viene da qualche parte dopo A, stesso genitore

Lo spazio e > sono la coppia che si confonde di più. Il selettore discendente arriva a qualsiasi profondità; il selettore figlio si ferma a un livello:

Combinatori tra fratelli: + e ~

I fratelli guardano solo in avanti. Non esiste un combinatore del "fratello precedente", anche se :has() può esprimerlo: h2:has(+ p) seleziona un h2 seguito direttamente da un p.

Selettori di attributo

Le parentesi quadre selezionano in base agli attributi e ai loro valori:

SelettoreSeleziona
[disabled]Ha l'attributo, con qualsiasi valore
[type="email"]Il valore è esattamente email
[href^="https"]Il valore inizia con https
[href$=".pdf"]Il valore finisce con .pdf
[class*="icon"]Il valore contiene icon in qualsiasi punto
[lang|="en"]Il valore è en o inizia con en-
[data-state="open" i]Corrispondenza esatta, senza distinguere maiuscole e minuscole

I selettori di attributo sugli attributi data-* sono un modo pulito per dare stile a uno stato impostato da JavaScript, senza inventare nomi di classe.

Prova qualsiasi selettore

Scrivi un selettore nel campo. Ogni elemento che seleziona riceve un contorno ambra, e il conteggio compare sotto.

Prova #demo a, ul > li, h2 ~ *, a[href^="https"], li:not(.active).

Composto contro discendente: lo spazio conta

p.note e p .note differiscono per uno spazio e significano cose diverse.

Come i browser leggono i selettori

Quando più regole selezionano lo stesso elemento e impostano la stessa proprietà, vince il selettore più specifico, e a parità vince quello scritto dopo. Un ID pesa più di qualsiasi numero di classi, e una classe più di qualsiasi numero di selettori di tipo; la pagina su !important ha la tabella completa della specificità.

Un gruppo ha un'insidia: se un selettore qualsiasi in un semplice elenco non è valido, l'intera regola viene scartata. In a, b:unknown { } nemmeno i link ricevono lo stile. Racchiudere l'elenco in :is() lo rende tollerante, quindi :is(a, b:unknown) dà comunque stile ai link.

Errori comuni

  • Dimenticare il punto o il cancelletto. tip { } seleziona un elemento <tip>, non class="tip". Scrivi .tip.
  • Uno spazio in un selettore composto. p .note non è p.note.
  • Aspettarsi che > arrivi ai nipoti. Usa uno spazio per qualsiasi profondità.
  • Un errore di battitura rompe un intero gruppo. In h1, h2:hovr, h3 niente riceve lo stile.
  • Selettori troppo lunghi. body div.wrapper ul li a è lento da leggere e difficile da sovrascrivere. Di solito basta una sola classe.

Domande frequenti

Cos'è un selettore CSS?

La parte di una regola CSS prima della { che dice a quali elementi si applicano le dichiarazioni. In p.note { color: blue; }, il selettore p.note seleziona ogni <p> con la classe note.

Qual è la differenza tra uno spazio e > in un selettore CSS?

Lo spazio è il combinatore discendente: nav a seleziona ogni link ovunque dentro un nav, a qualsiasi profondità. > è il combinatore figlio: nav > a seleziona solo i link il cui genitore diretto è il nav.

Cosa significa + in CSS?

+ è il combinatore del fratello adiacente. h2 + p seleziona un <p> che viene subito dopo un <h2> con lo stesso genitore. ~ è meno restrittivo: h2 ~ p seleziona ogni fratello <p> successivo.

Come seleziono gli elementi in base a un attributo in CSS?

Metti l'attributo tra parentesi quadre: [disabled] seleziona gli elementi che lo hanno, [type="email"] un valore esatto, [href^="https"] un valore che inizia con una stringa, [href$=".pdf"] uno che finisce con essa, e [class*="btn"] uno che la contiene.

CSS può selezionare un elemento genitore?

Sì, con la pseudo-classe :has(), supportata dalle versioni attuali di Chrome, Firefox e Safari. li:has(> a.active) seleziona gli elementi della lista che contengono direttamente un link attivo.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA