Le sélecteur :not() s'étend-il aux descendants distants ?
En CSS3, la pseudo-classe :not() fournit un moyen pour exclure certains éléments d'un sélecteur. Cependant, son comportement peut prêter à confusion lorsqu'il s'agit de descendants éloignés.
Implémentation actuelle
Selon la documentation officielle et l'analyse du support du navigateur, le sélecteur :not() uniquement s'applique aux enfants ou petits-enfants directs de l'élément ciblé.
Considérez cet exemple :
div *:not(p) { color: red; }
Cette règle style tous les enfants ou petits-enfants directs de
Cependant, le sélecteur :not() ne s'étend pas au-delà des petits-enfants.
Le problème
Dans cet exemple, le
:
<div> <ul> <li>This is red</li> </ul> <p>This is NOT</p> <blockquote><p>This is red but is not supposed to be!</p></blockquote> </div>
Dans ce cas, l'élément
l'élément correspond à la condition *:not(p) puisqu'il est un descendant de, tandis que l'élémentl'élément qu'il contient hérite de la couleur rouge.
Solution
Le comportement correct est pour l'élément
élément pour conserver sa couleur par défaut. Pour y parvenir, la règle doit cibler tous les
éléments directement :
div p { color: black; }Copier après la connexionFutures améliorations des sélecteurs CSS niveau 4
La proposition des sélecteurs CSS niveau 4 améliore le sélecteur :not() pour accepter des sélecteurs complexes complets avec combinateurs. Cela signifie que nous pourrons écrire des sélecteurs comme :
p:not(div p) { color: red; }Copier après la connexionCette syntaxe étendue permettra un ciblage plus précis des descendants distants.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!