Bien 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 :

				
					<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 :

				
					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 utliser > pour cibler celui qui est imbriqué directement après mon élément référent.

Par exemple, j'ai ici :

				
					<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 :

				
					div > p{
						color: red;
					}
				
			

Voilà le résultat :

Un super paragraphe dans une div.

Un super paragraphe 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 :

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

Voilà le résultat :

Un titre de niveau 2

Un super paragrahe.

Un super paragrahe.

Un titre de niveau 2

Un super paragrahe.

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).

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

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

Un super paragrahe.

Un titre de niveau 2

Un super paragrahe.

Un super paragrahe.

Un titre de niveau 3

Un super paragrahe.

*

L'étoile * permet de cibler tous les éléments :

				
					*{
						color: red;
					}
				
			

Ici, tous les élément de ma page auront une couleur rouge.

				
					header *{
						color: green;
					}
				
			

Ici, tous les élément compris dans le header auront une couleur verte.

Mutualisation des propriétés

Il est possible d'appliquer plusieur propriétés à des sélecteurs différents en les séparant par des virgules. Par exemple, nous allons pouvoir simplifier :

				
					p{
						color: red;
					}
					h2{
						color: red;
					}
					ol li{
						color: red;
					}
				
			

Par :

				
					p,
					h2,
					ol li{
						color: red;
					}