Aller au contenu

3. Cibler un élément

Vous l'avez compris, avec l'héritage des propriétés, l'un des plus gros challenges en CSS est de bien cibler son sélecteur. Pour cela, plusieurs sélecteurs nous sont mis à disposition.


X Y

Il est possible de cibler un élément contenu dans un autre élément. Par exemple, si j'ai un paragraphe dans une <div> et un autre à l'extérieur :

HTML
<div>
    <p>
        Un super paragraphe dans une div.
    </p>
</div>
<p>
    Un mega paragraphe solo.
</p>

Pour cibler uniquement le paragraphe dans ma div, je vais utiliser :

CSS
div p {
    color: red;
}

Ce qui me donne :

Un super paragraphe dans une div.

Un mega paragraphe solo.

X > Y

Dans le cas où j'aurais plusieurs éléments imbriqués de même nature compris dans ma <div>, je peux utiliser > pour cibler celui qui est imbriqué directement après mon élément référent.

Par exemple, j'ai ici :

  • un paragraphe hors de ma <div>,
  • un paragraphe directement dans ma <div>,
  • un paragraphe dans une section qui est comprise dan ma <div>.
HTML
<div>
    <p>
        Un super paragraphe dans une div.
    </p>
    <section>
        <p>
            Un super paragraphe dans une section qui est dans une div.
        </p>
    </section>
</div>
<p>
    Un mega paragraphe solo.
</p>

Pour cibler uniquement le paragraphe dans ma <div>, sans impacter celui présent dans la <section>, je vais ajouter un > dans mon CSS :

CSS
div > p {
    color: red;
}

Voilà le résultat :

Un super paragraphe dans une div.

Un super paragraphe dans une section qui est dans une div.

Un mega paragraphe solo.

X + Y

Le sélecteur + permet de cibler un élément placé directement après un autre. Par exemple, nous allons cibler uniquement les paragraphes situés directement après les titres de niveau 2 :

HTML
<h2>
    Un titre de niveau 2
</h2>
<p>
    Un super paragraphe rouge.
</p>
<p>
    Un super paragraphe.
</p>
<h2>
    Un titre de niveau 2
</h2>
<p>
    Un super paragraphe rouge.
</p>
CSS
h2 + p {
    color: red;
}

Voilà le résultat :

Un titre de niveau 2

Un super paragraphe rouge.

Un super paragraphe.

Un titre de niveau 2

Un super paragraphe rouge.

X ~ Y

À la différence du +, le sélecteur ~ permet de cibler n'importe quel élément Y qui se trouve derrière l'élément X. Par exemple, nous allons ici cibler tous les paragraphes situés derrière les balises <h2> (et pas seulement ceux situés directement après).

HTML
<p>
    Un super paragraphe.
</p>
<h2>
    Un titre de niveau 2
</h2>
<p>
    Un super paragraphe rouge.
</p>
<p>
    Un super paragraphe rouge.
</p>
<h3>
    Un titre de niveau 3
</h3>
<p>
    Un super paragraphe rouge.
</p>
CSS
h2 ~ p {
    color: red;
}

Résultat, seul le paragraphe situé avant le premier <h2> n'est pas ciblé :

Un super paragraphe.

Un titre de niveau 2

Un super paragraphe rouge.

Un super paragraphe rouge.

Un titre de niveau 3

Un super paragraphe rouge.