logo Dove iniziare Linguaggi Aiuto Blog
Home Dove iniziare Linguaggi Aiuto e Supporto Info e Blog

I selettori combinati in CSS

I selettori combinati in CSS sono utilizzati per selezionare elementi basandosi sulla loro relazione con altri elementi nella pagina HTML. I selettori combinati permettono di applicare stili a elementi specifici che si trovano in particolari relazioni con altri elementi, senza che debbano avere delle classi o id specifici.

I selettori combinati utilizzano i selettori CSS semplici che abbiamo visto nelle prime lezioni.

Nota: prima di iniziare, però, è importante sapere come funziona una pagina HTML. Possiamo dire che è formata da una struttura ad albero. Ogni elemento si trova, a sua volta, all'interno di un altro elemento. Ad esempio, un <div> si trova all'interno di <body>. Questo ci servirà per comprendere i diversi tipi di selettori combinati. Per capire meglio, guarda questa immagine:

Il DOM di HTML di una pagina web

Tipologie di selettori combinati

Esistono quattro tipi di selettori combinati:

  • Selettore di discendenti (" ").
  • Selettore di figli (>).
  • Selettore di fratelli adiacenti (+).
  • Selettore generale di fratelli (~).

Vediamoli in dettaglio.

Selettore di discendenti

Il selettore di discendenti seleziona tutti gli elementi che sono discendenti (a qualsiasi livello di profondità nella pagina HTML) di un altro elemento. Il selettore di discendenti combina due selettori, attraverso lo spazio

Sintassi: A B { ... }. Il primo selettore (A) rappresenta l'elemento contenitore e il secondo (B) rappresenta l'elemento all'interno di A che deve essere selezionato. Non è necessario che il B sia direttamente all'interno di A, ma può anche essere all'interno di altri elementi.

Ad esempio, coloriamo di rosso tutti i <p> all'interno del <div>:

<div>
  <p>Questo testo è colorato</p>
  <strong>Questo testo non è colorato</strong>
  <p>Questo testo è colorato</p>
  <section><p>Questo testo è colorato</p></section>
</div>

<style>
div p {
  color: red;
}
</style>

Nell'esempio, vengono colorati di rosso tutti i <p> all'interno del <div>: non soltanto quelli direttamente all'interno, ma anche quelli dentro altri tag come <section>.

Possiamo fare la stessa cosa anche con le classi e gli id:

<div>
  <p class="rosso">Questo testo è colorato</p>
  <strong class="rosso">Questo testo è colorato</strong>
  <p>Questo testo non è colorato</p>
  <section><span class="rosso">Questo testo è colorato</span></section>
</div>
<p class="rosso">Questo testo non è colorato</p>

<style>
div .rosso {
  color: red;
}
</style>

Selettore di figli

Il selettore di figli seleziona tutti gli elementi che sono figli diretti di un altro elemento. A differenza del selettore precedente, esclude tutti gli elementi che non sono figli diretti dell'elemento contenitore (ad esempio, all'interno di altri elementi).

SintassiA > B { ... }. Il primo selettore (A) rappresenta l'elemento contenitore e il secondo (B) rappresenta l'elemento direttamente all'interno di A che deve essere selezionato.

Ad esempio, coloriamo di rosso solo i <p> direttamente all'interno del <div>:

<div>
  <p>Questo testo è colorato</p>
  <strong>Questo testo non è colorato</strong>
  <p>Questo testo è colorato</p>
  <section><p>Questo testo non è colorato</p></section>
</div>

<style>
div > p {
  color: red;
}
</style>

Nell'esempio, vengono colorati di rosso tutti i <p> direttamente all'interno del <div>: quindi, non quelli dentro altri tag come <section>.

Possiamo anche creare una catena di selettori figli, in questo modo:

<div>
  <p>Questo testo non è colorato</p>
  <section>
    <p>Viene colorata solo <span>QUESTA PARTE</span></p>
  </section>
</div>

<style>
div > section > p > span {
  color: red;
}
</style>

Nell'esempio, viene colorato soltanto il contenuto del tag <span>. Con div > section > p > span, vengono selezionati soltanto gli <span> che si trovano dentro <p> che si trova dentro <section> che si trova dentro <div>.

Selettore di fratelli adiacenti

Il selettore di fratelli adiacenti seleziona un elemento che segue immediatamente un altro elemento (ovvero il fratello adiacente). Questo selettore combinato utilizza il simbolo +.

Sintassi: A + B { ... }. Il primo selettore (A) rappresenta l'elemento che deve precedere il selettore B. Il selettore B rappresenta il selettore fratello, dopo A, che verrà selezionato. B deve essere necessariamente dopo A, senza altri elementi tra A e B.

Ad esempio, coloriamo tutti i <p> dopo i <div>:

<div>
  <p>Questo testo non è colorato</p>
</div>
<p>Questo testo è colorato</p>
<p>Questo testo non è colorato</p>

<style>
div + p {
  color: red;
}
</style>

Nell'esempio, solo i <p> successivi a <div> vengono colorati. Invece, non vengono selezionati i <p> all'interno dei <div> e dopo i <p>.

È anche possibile creare una catena di selettori fratelli:

<div>
  <p>Questo testo non è colorato</p>
</div>
<p>Questo testo non è colorato</p>
<p>Questo testo è colorato</p>

<style>
div + p + p {
  color: red;
}
</style>

Nell'esempio, soltanto il <p> che è accanto al <p> che è accanto al <div> viene selezionato e colorato di rosso.

Selettore generale di fratelli

Il selettore generale di fratelli seleziona tutti gli elementi che sono fratelli di un altro elemento, indipendentemente dalla loro posizione, purché siano successivi. Questo selettore combinato utilizza il simbolo ~.

SintassiA ~ B { ... }. Il primo selettore (A) rappresenta l'elemento che deve precedere il selettore B. Il selettore B rappresenta il selettore fratello, dopo A, che verrà selezionato. B non deve essere necessariamente dopo A, ma possono trovarsi altri elementi tra A e B.

Ad esempio, coloriamo tutti i <p> dopo i <div>:

<div>
  <p>Questo testo non è colorato</p>
</div>
<p>Questo testo è colorato</p>
<p>Questo testo è colorato</p>
<p>Questo testo è colorato</p>

<style>
div ~ p {
  color: red;
}
</style>

Nell'esempio, tutti i <p> successivi a <div> vengono colorati, anche quelli non direttamente successivi. Invece, non vengono selezionati i <p> all'interno dei <div>.

Puoi anche creare una catena di selettori fratelli:

<div>
  <p>Questo testo non è colorato</p>
</div>
<p>Questo testo non è colorato</p>
<p>Questo testo è colorato</p>
<p>Questo testo è colorato</p>

<style>
div ~ p ~ p {
  color: red;
}
</style>

Nell'esempio, soltanto i <p> che sono accanto al <p> che è accanto al <div> vengono selezionati e colorati di rosso.

Prova!Completa gli spazi vuoti con il testo appropriato.
<!-- Seleziona il <p> con i selettori combinati CSS -->
<div><p>Ciao a tutti</p></div>

<style>
> { color: red; }
</style>

Prova!Scegli l'opzione corretta tra quelle elencate.
<div>
  <p>Questo testo non è colorato</p>
</div>
<p>SELEZIONA QUESTO TESTO CON CSS</p>
<p>Questo testo non è colorato</p>

<style>
________ { color: red; }
</style>