css Beginner 3 min

Selettori CSS: i sei tipi e come combinarli

Tipo, classe, id, attributo, pseudo-classe, pseudo-elemento: più :is(), :where(), :not() e i combinatori

· 555 parole

Un selettore è la parte di una regola CSS che dice a chi applicare lo stile. Vediamo i sei tipi fondamentali, quanto «pesano» (la loro specificità) e come combinarli.

Un selettore è il criterio con cui chiami un gruppo di persone in una sala. Puoi dire «tutti i medici» (tipo), «chi indossa il maglione rosso» (classe) o «la persona con matricola 123» (id). Più il criterio è mirato, più «pesa».

1. I sei tipi di selettore (e la loro specificità)

La specificità si scrive su tre colonne, ID - CLASSE - TIPO (l'abbiamo vista nella pillola sulla cascade). Ecco quanto vale ciascun selettore:

  • p h1 tipo (elemento): seleziona per nome del tag → 0-0-1
  • .evidenza classe: per l'attributo class → 0-1-0
  • #logo id: per l'attributo id (unico nella pagina) → 1-0-0
  • [type="email"] attributo: per presenza o valore di un attributo → 0-1-0 (come la classe)
  • :hover :first-child pseudo-classe: per uno stato o una posizione (un due punti) → 0-1-0
  • ::before ::first-line pseudo-elemento: una parte che non è un vero elemento (due due-punti) → 0-0-1

Poi abbiamo il selettore l'universale *, che seleziona tutto ma la sua specificità è 0-0-0.

Qual'è la differenza tra una pseudo-classe è uno pseudo-elemento? La pseudo-classe è «la persona che in questo momento alza la mano», uno stato temporaneo di chi è già presente in una riunione. Il pseudo-elemento è «l'iniziale decorata di questo paragrafo», una parte che non esisteva come elemento a sé, ma che ora puoi truccare.

Fonte: MDN Web Docs: «CSS selectors and combinators» e «Specificity».

2. I combinatori: le relazioni tra elementi

I combinatori descrivono la posizione di un elemento rispetto a un altro. Ce ne sono quattro:

article p /* ogni <p> dentro un <article> (discendente) */ 

article > p /* solo i <p> figli DIRETTI di <article> (figlio) */ 

h2 + p /* il <p> subito dopo un <h2> (adiacente) */ 

h2 ~ p /* tutti i <p> dopo un <h2> (successivo) */

Nota importante: i combinatori rendono la selezione più precisa, ma non aggiungono peso alla specificità (il peso viene solo dai selettori che collegano).

Fonte: MDN Web Docs: «CSS selectors and combinators» (combinatori discendente, figlio, +, ~).

3. :is(), :where() e :not(): raggruppare e negare

:is(...) significa «uno qualunque tra»: accorcia i selettori lunghi. :not(...) significa «tutti tranne». Entrambi prendono la specificità del loro argomento più forte. :where(...) seleziona esattamente come :is(), ma la sua specificità è sempre zero (0-0-0).

:is(h1, h2, h3) { 
   color: navy; 
} /* invece di h1, h2, h3 { … } */ 

:where(a) { 
   color: blue; 
} /* 0-0-0: facilissimo da sovrascrivere */ 

li:not(:last-child) { 
   border-bottom: 1px solid; 
}

La differenza tra :is() e :where() è solo la specificità: :where() vale zero, ed è perfetto per stili di base (reset, temi, librerie) che vuoi rendere facili da sovrascrivere.

Fonte: MDN Web Docs: pseudo-classi funzionali «:is()», «:where()», «:not()».

In sintesi

Selettore Esempio Specificità
Tipo / elemento p, h1 0-0-1
Classe .evidenza 0-1-0
ID #logo 1-0-0
Attributo [type="email"] 0-1-0
Pseudo-classe :hover 0-1-0
Pseudo-elemento ::before 0-0-1
Universale * 0-0-0
:is() / :not() :is(.a, #b) quella dell'argomento più forte
:where() :where(.a, #b) 0-0-0 (sempre)
Combinatori > + ~ (spazio) non aggiungono peso

Regola pratica: usa il selettore più semplice che funziona, tieni bassa la specificità (:where() è tuo amico) e riserva gli #id ai casi davvero unici. I combinatori e funzioni come :is() servono a scrivere meno e in maniera più chiara.

Per approfondire

Accedi o registrati per votare, salvare o commentare la pillola

Commenti (0)

Registrati per commentare, fare domande e proporre l'argomento della prossima pillola (oppure accedi se hai già un account).

Nessun commento. Sii il primo a scrivere qualcosa.

Pillole correlate