ForHosting KIT · Veille et lecture de sites web

Calculateur de spécificité des sélecteurs CSS

La spécificité CSS détermine quelle déclaration concurrente peut l’emporter avant l’ordre des sources et les autres règles de la cascade.

● BetaGratuit · dans votre navigateur
Utilisez-le depuis WebAPIE-mailTelegramApp bientôt

Ce calculateur accepte un sélecteur, valide sa structure et renvoie le décompte habituel en quatre parties : styles en ligne, ID, classes ou attributs ou pseudo-classes, puis types d’éléments ou pseudo-éléments. Il applique également les règles particulières des sélecteurs modernes tels que :is(), :not(), :has(), :where() et :nth-child(). Vous pouvez vous en servir pour expliquer une surcharge inattendue, comparer des sélecteurs lors d’une refactorisation ou intégrer un contrôle fiable à vos outils de développement.

Lire le résultat de spécificité en quatre parties

Le résultat est présenté sous la forme (en ligne, ID, classe, type). La première position représente les déclarations de style en ligne ; puisque cet outil reçoit un sélecteur et non un attribut style HTML, cette valeur reste toujours égale à zéro. La deuxième position compte les sélecteurs d’ID comme <code>#checkout</code>. La troisième regroupe les sélecteurs de classe, les sélecteurs d’attribut et les pseudo-classes : <code>.button</code>, <code>[disabled]</code> et <code>:hover</code> ajoutent donc chacun une unité. La quatrième compte les sélecteurs de type d’élément et les pseudo-éléments ; <code>button</code> et <code>::before</code> ajoutent chacun une unité. Les sélecteurs universels et les combinateurs n’ajoutent rien. Comparez le tuple de gauche à droite au lieu d’en faire une somme décimale : un ID dépasse n’importe quel nombre de classes, et une classe dépasse n’importe quel nombre de types. Les champs nommés facilitent l’exploitation dans du code, tandis que le tableau de spécificité conserve la représentation conventionnelle. La spécificité ne constitue toutefois qu’une partie de la cascade. L’origine, l’importance, les couches, la proximité de portée et l’ordre des sources peuvent encore désigner la déclaration gagnante sur une page réelle.

Comprendre les règles des pseudo-classes fonctionnelles

Les pseudo-classes fonctionnelles modernes ne se résument pas à compter chaque jeton. <code>:is()</code>, <code>:not()</code> et <code>:has()</code> apportent la spécificité du sélecteur le plus spécifique de leur liste d’arguments ; l’enveloppe elle-même n’ajoute aucun poids de classe. À l’inverse, <code>:where()</code> apporte toujours zéro, même si son argument contient un ID. Cette propriété rend <code>:where()</code> pratique pour les valeurs par défaut de bibliothèques qui doivent rester simples à surcharger. Les pseudo-classes structurelles <code>:nth-child()</code> et <code>:nth-last-child()</code> ajoutent une unité de pseudo-classe et, lorsqu’une liste facultative suit <code>of</code>, elles ajoutent aussi son membre le plus spécifique. Les autres pseudo-classes fonctionnelles comptent au niveau classe, tandis que les pseudo-éléments comptent au niveau type. L’analyseur reconnaît également les sélecteurs relatifs dans <code>:has()</code>, les caractères d’identifiant échappés, les valeurs d’attribut ponctuées, les espaces de noms et les anciennes formes à un seul deux-points <code>:before</code>, <code>:after</code>, <code>:first-line</code> et <code>:first-letter</code>. Ces distinctions correspondent au raisonnement des auteurs sur le CSS actuel, sans réduire les parenthèses à du texte opaque.

Détecter les erreurs grâce à la validation

Un indice de spécificité n’est utile que si l’entrée ressemble réellement à un sélecteur. Le calculateur refuse donc les champs manquants, le texte vide, les chaînes inachevées, les crochets ou parenthèses non fermés, les combinateurs mal formés, les identifiants absents après un point ou un croisillon et d’autres erreurs structurelles. Il accepte un seul sélecteur à la fois. Une virgule au niveau supérieur crée une liste dont les membres peuvent avoir des spécificités différentes ; cette entrée est donc rejetée avec une demande de sélecteur unique. Calculez chaque membre séparément lorsque vous comparez une liste de règles. La longueur d’entrée est bornée afin de garantir une exécution prévisible, et l’algorithme n’utilise ni session de navigateur, ni réseau, ni valeur aléatoire, ni horloge. Une entrée identique produit ainsi le même JSON dans le widget local, un appel API, une suite de tests ou un contrôle de build. Utilisez ce résultat comme diagnostic ciblé, puis examinez les couches de cascade, <code>!important</code>, l’héritage et l’ordre des sources si la spécificité n’explique pas à elle seule le style affiché.

Déboguer une surcharge tenace

Comparez des sélecteurs concurrents et repérez le composant qui permet à une règle d’en dépasser une autre.

Contrôler une refactorisation CSS

Vérifiez qu’un sélecteur simplifié réduit la spécificité sans introduire par mégarde un ID ou une pseudo-classe supplémentaire.

Enrichir les outils de développement

Ajoutez une validation déterministe et des décomptes structurés à un linter, un éditeur ou un rapport d’intégration continue.

Que représente la valeur des styles en ligne ?

Elle représente les déclarations de style en ligne. Elle vaut toujours zéro ici, car l’entrée est un sélecteur CSS et non un attribut style HTML.

Est-ce que :where() augmente la spécificité ?

Non. :where() et la totalité de son argument apportent toujours zéro, même si la structure du sélecteur reste validée.

Comment :is(), :not() et :has() sont-ils comptés ?

Ils apportent la spécificité du sélecteur le plus spécifique de leur liste d’arguments ; la pseudo-classe fonctionnelle n’ajoute aucun poids propre.

Puis-je envoyer une liste séparée par des virgules ?

Non. Envoyez séparément chaque sélecteur de niveau supérieur, car les membres d’une liste peuvent avoir des spécificités différentes.

La spécificité la plus élevée gagne-t-elle toujours ?

Non. L’origine, l’importance, les couches, la proximité de portée et l’ordre des sources peuvent primer ou départager les règles.

Combien coûte une requête API ?

Chaque requête API coûte $0.002. La version pour navigateur peut fonctionner localement sans transmettre le sélecteur à un serveur.

Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.

POSThttps://api.kit.forhosting.com/web/css-specificity-calc

Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.

curl -X POST https://api.kit.forhosting.com/web/css-specificity-calc \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"selector":"article#main.card[data-state='\''open'\'']:hover > h2::before"}'
{
  "selector": "article#main.card[data-state='open']:hover > h2::before"
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "web.css_specificity_calc",
  "status": "queued",
  "_links": {
    "result": "/tasks/tsk_…/result"
  }
}

L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.

par requête$0.002

Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.

max_chars10000
HTTPCodeSignification
401unauthorizedClé API absente ou invalide : vérifiez l’en-tête Authorization.
402insufficient_balanceSolde insuffisant : rechargez votre compte pour lancer cette tâche.
404unknown_typeType de tâche inconnu : vérifiez le champ type de votre requête.
429rate_limitedTrop de requêtes : ralentissez la cadence, puis réessayez.

Consulter la documentation complète du KIT →