Résumé
- Le projet de février 2018 mentionnait un pseudo-sélecteur de spécificité nulle encore sans nom. Celui de novembre l’appelait
:where()et mettait en scène deux règles rivales pour un lien. - Les conditions placées dans
:where()continuent de filtrer les éléments, mais leur spécificité tombe à zéro. Les sélecteurs situés à l’extérieur des parenthèses conservent leur poids.
Voici le conflit dans sa forme la plus domestique. a:not(:hover) supprime le soulignement des liens que la souris ne survole pas. Plus loin, nav a veut souligner les liens d’un menu. On pourrait croire que la seconde règle, écrite plus tard, l’emportera. La spécificité répond avant l’ordre des lignes : une pseudo-classe et un nom d’élément pèsent davantage que deux noms d’élément. Le trait manque toujours. Dans beaucoup d’équipes, la réunion suivante s’intitulerait « ajoutons une classe », et la troisième « où est passé !important ? ».
Le projet Selectors Level 4 du 21 novembre 2018 propose un geste moins bruyant. La règle générale devient a:where(:not(:hover)). Elle repère les mêmes liens hors survol. Le filtre placé dans :where() ne contribue plus à la spécificité; seul le a extérieur compte. nav a gagne alors dans le menu. La règle commune continue son service, mais elle cesse de confisquer la décision locale. Le trait revient sans surenchère.
L’invention a précédé son baptême. Le texte du 2 février 2018 ajoutait une pseudo-classe apparentée à :matches() et de spécificité nulle, avec un nom encore à choisir. En novembre, :where() figurait dans la grammaire. La note du groupe de travail CSS relevait précisément ce nom, ainsi que le passage de :matches() à :is(). Ce calendrier raconte le problème d’origine : le navigateur savait déjà reconnaître un élément; il fallait donner à l’auteur la possibilité d’affaiblir volontairement une règle pourtant précise.
Un sélecteur porte d’ordinaire deux messages. « Voici les éléments auxquels je m’adresse », puis « voici mon rang si une autre déclaration me contredit ». :where() sépare ces messages. Dans le projet du 7 mai 2022, .qux:where(em, #foo#bar#baz) a une spécificité de (0,1,0). Les identifiants impressionnants à l’intérieur servent à la recherche, pas au classement. La classe .qux, restée dehors, compte normalement. Le zéro a une frontière précise; le reste de la règle n’entre pas en grève.
Cette frontière change la vie des bibliothèques de styles. Elles peuvent fournir une apparence de départ pour les liens ou les composants, avec assez de précision pour éviter les mauvais destinataires. La page qui les utilise garde la possibilité de choisir un autre aspect pour son menu, sans copier la structure entière de la bibliothèque dans un sélecteur encore plus lourd. Le navigateur applique la même arithmétique partout. Les auteurs décident, règle par règle, du poids qu’ils souhaitent donner à un réglage commun.
Le projet du 11 novembre 2022 décrit également les listes de sélecteurs dites tolérantes : certains éléments invalides peuvent être écartés tandis que les éléments valides restent. C’est un détail utile pour comprendre cette famille de fonctions, à lire selon ses règles de syntaxe exactes. Le cœur de l’histoire demeure dans les dates de publication du W3C et dans ce menu obstiné. Une règle partagée peut être assez intelligente pour trouver sa cible, et assez bien élevée pour laisser un autre auteur décider de la suite.
Briefing des membres
Contexte approfondi du profil
Connectez-vous avec le bon niveau d'adhésion pour débloquer le briefing complet et les notes de source.
Réservé à Strategic Circle
Strategic Circle
Ouvert à tous les lecteurs. Débloquez les briefings de profil après adhésion et connexion.
Rejoindre Strategic CircleRéservé aux membres de Leadership Alliance
Leadership Alliance
Réservé aux propriétaires et dirigeants qualifiés d'actifs IP ; connectez-vous pour débloquer les briefings Alliance.
Rejoindre Leadership Alliance





