ForHosting KIT · Veille et lecture de sites web

Trier les sélecteurs CSS par spécificité

La spécificité CSS détermine quelle déclaration concurrente peut l’emporter avant la prise en compte de l’ordre des sources et de l’importance.

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

Comparer visuellement une longue série de sélecteurs reste pourtant lent et propice aux erreurs. Cet outil reçoit des sélecteurs CSS individuels, valide leur syntaxe, calcule leur valeur de spécificité en trois parties et renvoie la liste entière du niveau le plus faible au plus élevé. Il comprend les pseudo-classes fonctionnelles modernes comme :is(), :not(), :has(), :where() et :nth-child(), tout en conservant l’ordre initial lorsque deux sélecteurs ont le même poids.

Lire le score de spécificité en trois parties

Chaque résultat suit la structure habituelle ID, classes et types. Le premier nombre compte les sélecteurs d’ID tels que <code>#checkout</code>. Le deuxième compte les classes, les sélecteurs d’attribut et les pseudo-classes comme <code>.active</code>, <code>[disabled]</code> et <code>:hover</code>. Le troisième compte les sélecteurs de type et les pseudo-éléments comme <code>button</code> et <code>::before</code>. Les sélecteurs universels et les combinateurs n’ajoutent rien. La comparaison est lexicographique : un seul ID l’emporte sur tout nombre d’entrées dans les autres colonnes, et une classe l’emporte sur tout nombre de sélecteurs de type lorsque le nombre d’ID est identique. Le tableau <code>specificity</code> convient aux traitements logiciels, tandis que <code>specificity_text</code> présente la même valeur sous une forme compacte et lisible. Le tri croissant place les règles largement réutilisables en premier et les sélecteurs les plus difficiles à surcharger en dernier. Quand deux scores sont strictement égaux, l’outil conserve leur ordre d’entrée au lieu d’inventer un classement alphabétique secondaire. Ce comportement stable garantit des exécutions prévisibles et préserve le contexte d’une feuille de style ou d’une liste de contrôle.

Traiter correctement les pseudo-classes modernes

Les pseudo-classes fonctionnelles sont la principale source d’erreurs dans les calculs manuels. <code>:where()</code> apporte toujours une spécificité nulle, y compris pour les sélecteurs qu’elle contient ; vous pouvez ainsi préciser une structure sans rendre une règle plus difficile à surcharger. En revanche, <code>:is()</code>, <code>:not()</code> et <code>:has()</code> prennent la spécificité de leur argument le plus spécifique, sans ajouter leur propre point de pseudo-classe. Les formes <code>:nth-child()</code> et <code>:nth-last-child()</code> ajoutent un point de pseudo-classe, puis la spécificité maximale d’une liste facultative introduite par <code>of</code>. Les formes liées au DOM fantôme, comme <code>:host()</code> et <code>::slotted()</code>, sont également prises en charge. L’analyseur parcourt les parenthèses imbriquées, les crochets, les chaînes entre guillemets et les échappements ; une virgule interne à une fonction n’est donc pas confondue avec un séparateur de premier niveau. Transmettez chaque élément sous la forme d’un seul sélecteur. Une virgule de premier niveau désignerait plusieurs sélecteurs dont les scores peuvent différer : elle est rejetée plutôt que réduite à une valeur unique trompeuse. Chaque entrée correspond ainsi exactement à un score de sortie.

Simplifier la cascade grâce à la liste triée

Un rapport de spécificité sert surtout à guider une refactorisation, pas à encourager des sélecteurs toujours plus puissants. Collez des sélecteurs représentatifs d’un composant, d’un système de conception ou d’une feuille héritée, puis examinez la fin du résultat. Les écarts importants révèlent souvent des ID, des états trop qualifiés ou un argument puissant dissimulé dans <code>:is()</code> ou <code>:not()</code>. Ces sélecteurs peuvent forcer le code ultérieur à répéter des détails structurels uniquement pour surcharger une déclaration. Vous pouvez les remplacer par une classe à fonction unique, diminuer le poids du contexte facultatif avec <code>:where()</code> ou organiser des couches afin que la priorité ne dépende pas d’une escalade des scores. Le début du classement est lui aussi instructif : les règles d’élément et les utilitaires légers se réutilisent plus facilement lorsque leur rôle est explicite. Un processus automatisé peut appeler l’API pour $0.002 afin de signaler les nouveaux sélecteurs dépassant le seuil choisi par votre équipe, d’enregistrer la spécificité avec le CSS généré ou de présenter des diagnostics triés en révision. Toute entrée incorrecte fait échouer la requête entière, de sorte qu’un rapport partiel ne masque jamais un sélecteur mal formé. Le calcul est déterministe et sans accès réseau : une même entrée produit toujours les mêmes valeurs et le même ordre.

Auditer une ancienne feuille de style

Triez les sélecteurs par poids pour repérer les ID et les règles très qualifiées qui compliquent les surcharges courantes.

Examiner le CSS d’un composant

Comparez les nouveaux sélecteurs aux conventions existantes avant d’intégrer une modification dans un système de conception partagé.

Appliquer un budget de spécificité

Calculez les scores lors d’un contrôle automatisé et signalez les sélecteurs dépassant le maximum choisi par votre équipe.

Que signifie chaque nombre de spécificité ?

Les trois valeurs comptent respectivement les sélecteurs d’ID, ceux assimilés aux classes et ceux assimilés aux types ; elles sont comparées de gauche à droite.

Comment :where() est-elle comptabilisée ?

:where() et tout le contenu de son argument apportent une spécificité nulle, même si la syntaxe du sélecteur reste validée.

Comment :is(), :not() et :has() sont-elles comptabilisées ?

Chacune prend la spécificité du sélecteur le plus spécifique de sa liste d’arguments, sans point de pseudo-classe supplémentaire.

Un élément d’entrée peut-il contenir des virgules ?

Pas au premier niveau. Envoyez chaque sélecteur séparément, car les membres d’une liste peuvent avoir des spécificités différentes. Les virgules imbriquées dans les pseudo-classes fonctionnelles compatibles sont acceptées.

Que se passe-t-il si deux sélecteurs ont la même spécificité ?

Leur ordre d’entrée initial est conservé, ce qui rend le tri stable et déterministe.

Quel est le prix d’une requête API ?

Chaque requête coûte $0.002. La version pour navigateur s’exécute localement et gratuitement.

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-sort

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-sort \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"selectors":["button",".toolbar button:hover","#app .toolbar button"]}'
{
  "selectors": [
    "button",
    ".toolbar button:hover",
    "#app .toolbar button"
  ]
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "web.css_specificity_sort",
  "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_items1000
max_selector_length4096
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 →