Pseudo-classe CSSPseudo-classes

:not()

Sélectionne les éléments qui ne correspondent à aucun des sélecteurs fournis, ni à aucun de la liste.

Sur cette page

Exemple

#
CSS
.btn:not(:disabled):hover {
  background: #6d28d9;
}

.btn:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}
Aperçu

Survolez les deux boutons. Le bouton désactivé ne change pas de couleur, car la règle de survol l’exclut.

Définition et utilisation

#

La pseudo-classe :not() inverse une condition. li:not(.done) sélectionne les points de liste sans la classe done, et input:not([type="checkbox"]) tous les champs sauf les cases à cocher. Elle permet de styliser « tout sauf » sans écrire de règle qu’il faudra ensuite annuler.

Les navigateurs modernes acceptent dans la parenthèse une liste de sélecteurs, même complexes : :not(.a, .b) signifie « ni .a, ni .b », soit la même chose que :not(.a):not(.b). La liste ne pardonne pas les erreurs : un seul sélecteur invalide annule toute la règle. Les pseudo-éléments ne peuvent pas non plus figurer dans la parenthèse.

La spécificité de :not() est celle du sélecteur le plus fort de la liste, pas zéro. p:not(#intro) a donc un poids de (1, 0, 1). Méfiez-vous aussi d’un :not(p) isolé : il correspond à tout ce qui n’est pas un paragraphe, y compris html et body, donc mieux vaut le restreindre, par exemple .menu > :not(.active).

Syntaxe

#
Syntaxe
:not( <liste de sélecteurs> )

Arguments

#
  • .done

    Chaque point sans la classe done, y compris celui avec la classe locked.
  • .done, .locked

    Liste dans la parenthèse : ni done, ni locked. Il reste deux points ordinaires.
  • :first-child

    Tous les points sauf le premier.
  • [class]

    Les points qui n’ont aucun attribut class.

Arguments en pratique

#

.done

Chaque point sans la classe done, y compris celui avec la classe locked.
li:not(.done) { background: #7c3aed; color: #fff; }

.done, .locked

Liste dans la parenthèse : ni done, ni locked. Il reste deux points ordinaires.
li:not(.done, .locked) { background: #7c3aed; color: #fff; }

:first-child

Tous les points sauf le premier.
li:not(:first-child) { background: #7c3aed; color: #fff; }

[class]

Les points qui n’ont aucun attribut class.
li:not([class]) { background: #7c3aed; color: #fff; }

Compatibilité des navigateurs

#

Largement disponible

Fonctionne dans tous les navigateurs modernes, y compris sur mobile. Vous pouvez l’utiliser sans crainte.

  • Chrome
  • Edge
  • Firefox
  • Safari

Bonnes pratiques

#
  • Plutôt que d’écrire une règle pour tous les éléments puis de l’annuler pour l’un d’eux, excluez-le directement avec :not(). Le code est plus court et ne se contredit pas lui-même.
  • Surveillez le poids : :not(#id) ajoute la spécificité d’un identifiant, bien qu’il ne sélectionne rien par cet identifiant.
  • Utilisez toujours un :not() isolé avec un contexte, par exemple .lista > :not(.ukryty). Sans cela, la règle touchera aussi html, body et d’autres éléments.

Entrées associées

#

Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.