Installation impossible Essayez d'installer directement depuis votre navigateur

Les fonctionnalités CSS :nth-child of et :has

Votre navigateur ne supporte pas ces fonctionnalités. Vous verrez une simulation des explications et des exemples.

#Sommaire

#Support

Navigateurs supportants :nth-child of Navigateurs supportants :has()

#Explications

#:nth-child of

Imaginons un panier de fruits avec plusieurs fruits (éléments) et que nous voulons styliser différemment certains d'entre eux en fonction de leur position parmi les fruits d'un certain type.

.panier_de_fruits > .fruit:nth-child(2 of .banane) { background: white; }
pomme banane pomme banane orange

Parmi les éléments .fruit qui sont des enfants directs de .panier_de_fruits, on sélectionne parmis les .banane, celle qui est à la deuxième position (2 of .banane) et on lui donne un fond blanc.

#:has

La pseudo-classe :has permet de sélectionner un élément parent en fonction de la présence d'un sélecteur spécifique parmi ses descendants.

.panier_de_fruits:has(.pasteque) { border: 4px solid white; }
banane pomme
banane pastèque pomme

#Exemple

Que peut on faire avec ces deux fonctionnalités combinés ?

.panier_de_fruits:has(:nth-child(2 of .orange)) { border: 4px solid white; }
banane banane orange
orange orange banane
pastèque pastèque pomme
orange orange pomme orange

On peut séléctionner un panier de fruits qui contient au moins 2 oranges !

#Application

Fruits Matches

Faites des lignes horizontales de 4 mêmes fruits pour gagner des points !


Votre navigateur ne supporte pas ces fonctionnalités.
(désolé pas de jeu pour vous)
SCORE : 0

#Comment ça marche ? (en CSS)

Les lignes qui contiennent 4 fruit identiques sont selectionnés

.ligne:has(:nth-child(4 of .pomme)) { opacity: 0; }

Et sont effacées !


Reste à faire ça pour tout les fruits

.ligne:has(:nth-child(4 of .pomme)),
.ligne:has(:nth-child(4 of .banane)),
.ligne:has(:nth-child(4 of .orange)),
.ligne:has(:nth-child(4 of .poire)),
.ligne:has(:nth-child(4 of .raisin)),
.ligne:has(:nth-child(4 of .pasteque))
{ opacity: 0; }