CSS :only-child Pseudo Classe
Utilisez la pseudo-classe CSS :only-child pour sélectionner et styliser l'unique enfant d'un parent. Exemples et explications pratiques.
La pseudo-classe :only-child correspond à un élément qui est le seul enfant de son parent — c'est-à-dire un élément sans aucun frère ni sœur.
L'élément est sélectionné uniquement si son parent ne contient aucun autre élément enfant. La pseudo-classe :only-child est fonctionnellement équivalente à :first-child:last-child (être à la fois le premier et le dernier enfant signifie qu'il n'y a rien d'autre entre les deux), et elle porte la même spécificité de (0,2,0), car elle compte comme deux pseudo-classes.
Cette page explique ce que :only-child sélectionne, en quoi il diffère des sélecteurs apparentés comme :only-of-type, comment l'utiliser dans des mises en page réelles, et les pièges courants à éviter.
Quand utiliser :only-child
:only-child est particulièrement utile lorsque vous souhaitez qu'un élément ait un aspect différent selon qu'il se trouve seul ou parmi des frères et sœurs. Cas d'usage courants :
- Listes avec un seul élément. Stylisez différemment une liste d'un seul élément (par exemple, masquez une puce ou supprimez un séparateur qui n'a de sens qu'avec plusieurs éléments).
- Mises en page en cartes ou en grilles. Une carte isolée peut être centrée ou étirée, tandis que deux cartes ou plus basculent vers une disposition multi-colonnes.
- Contenu généré. Lorsque le balisage est produit par un CMS ou une boucle de gabarit, il est souvent impossible de savoir à l'avance combien de frères et sœurs apparaîtront ;
:only-childpermet à la feuille de style de réagir automatiquement.
Différence avec :only-of-type
C'est le point de confusion le plus courant :
:only-child— correspond uniquement lorsque l'élément est le seul enfant de son parent, quel que soit le type d'élément. Si un autre élément frère ou sœur existe, il ne correspond pas.:only-of-type— correspond lorsque l'élément est le seul de son type parmi ses frères et sœurs, même si des frères et sœurs d'autres types existent.
<div>
<h2>Heading</h2>
<p>Only paragraph here</p>
</div>Dans le balisage ci-dessus, le <p> n'est pas un :only-child (le <h2> est également un enfant), mais il est :only-of-type, car c'est le seul <p>.
Le contenu textuel ne compte pas
:only-child ne prend en compte que les frères et sœurs éléments. Le texte brut autour d'un élément ne l'empêche pas de correspondre :
<p>Some text <strong>bold</strong> more text</p>Ici, <strong> correspond quand même à strong:only-child, car les nœuds texte environnants ne sont pas des éléments. Les espaces blancs et les commentaires sont également ignorés.
Version
Syntaxe
Syntaxe CSS :only-child
:only-child {
css declarations;
}Exemple du sélecteur :only-child :
Exemple :only-child
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
<style>
p:only-child {
background: #1c87c9;
}
</style>
</head>
<body>
<h2>:only-child selector example</h2>
<div>
<p>Lorem ipsum is simply dumnmy text.</p>
</div>
<div>
<p>Lorem ipsum is simply dummy text.</p>
<p>Lorem ipsum is simply dummy text.</p>
</div>
</body>
</html>Exemple du sélecteur :only-child pour la balise <li> :
Exemple :only-child avec la balise li
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
<style>
ul li {
list-style-type: square;
}
li:only-child {
color: blue;
list-style-type: disc;
}
</style>
</head>
<body>
<h2>:only-child selector example</h2>
<ol>
<li>
One element
<ul>
<li>This list has just one element.</li>
</ul>
</li>
<li>
Two elements
<ul>
<li>This list has two elements.</li>
<li>This list has two elements.</li>
</ul>
</li>
<li>
Three elements
<ul>
<li>This list has three elements.</li>
<li>This list has three elements.</li>
<li>This list has three elements.</li>
</ul>
</li>
</ol>
</body>
</html>Exemple du sélecteur :only-child pour la balise <em> :
Exemple :only-child avec la balise em
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
<style>
em:only-child {
background-color: #8ebf42;
}
</style>
</head>
<body>
<h2>:only-child selector example</h2>
<p>This is a <em>paragraph</em>.</p>
<p>This is a paragraph.</p>
</body>
</html>Exemple du sélecteur :only-child pour la balise <div> :
Exemple :only-child pour la balise div
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
<style>
div:only-child {
color: #8ebf42;
font-weight: bold;
}
div {
display: block;
margin: 6px;
padding: 5px;
outline: 1px solid #1c87c9;
}
div div {
display: inline-block;
}
</style>
</head>
<body>
<h2>:only-child selector example</h2>
<div>
<div>I am an only child.</div>
</div>
<div>
<div>I am the 1st sibling.</div>
<div>I am the 2nd sibling.</div>
<div>
I am the 3rd sibling,
<div>but this is an only child.</div>
</div>
</div>
</body>
</html>Sélecteurs associés
:only-of-type— le seul élément de son type parmi ses frères et sœurs.:first-childet:last-child— ciblent le premier ou le dernier enfant ;:only-childest équivalent à la combinaison des deux.:nth-child()— correspond aux enfants par position à l'aide d'une formule.