Je ne sais pas encore, mais existe-t-il un outil qui optimise les sélecteurs CSS en supprimant les spécificités inutiles ?
Lorsque j'écris des CSS, je fais délibérément en sorte que mes sélecteurs soient plus spécifiques que nécessaire pour éviter les conflits et pour la quasi-documentation.
Ce serait formidable s'il existait un outil capable d'analyser un groupe donné de règles, de déterminer leur "unicité" en termes de chevauchement avec d'autres règles, puis de supprimer toute spécificité inutile.
Je ne peux même pas imaginer comment un développeur d'outils aborderait tous les scénarios que cela nécessiterait, mais j'ai déjà été époustouflé par l'ingéniosité des autres dans ce domaine et j'ai pensé que cela valait la peine de demander.
Mise à jour :
J'ai ajouté une prime à cette question, et plus j'y pense, plus je me rends compte de la valeur d'une Filtre de spécificité CSS serait.
Par exemple, lorsque vous travaillez avec des règles/sélecteurs imbriqués dans l'application Sass y MOINS , nidification excessive est un commun y bien connu qui peut facilement conduire à des sélecteurs trop spécifiques.
L'excellent cours TutsPlus en est une bonne illustration. CSS maintenable avec Sass et Compass :
body {
div.container {
p {
a {
color: purple;
}
}
}
}
Sass suivra ces instructions d'imbrication et produira le résultat CSS suivant, sans soulever d'objection à toute spécificité inutile :
body div.container p a {
color: purple;
}
Toutefois, si un filtre de spécificité existait, il présenterait des avantages potentiels pour les développeurs de CSS :
-
Vous pourriez organiser vos feuilles de style comme un mappage 1:1 du DOM, similaire à ce que vous voyez lorsque vous examinez les règles de style dans Firebug et Chrome Dev Tools. Un éditeur/IDE intelligent pourrait remplir automatiquement les styles pour les éléments du DOM avec des styles/classes partagés. Cette redondance serait alors, bien sûr, filtrée par le filtre/optimiseur de spécificité.
-
La structure des feuilles de style pourrait être préremplie par un outil qui analyse le DOM et le traduit en sélecteurs/règles CSS. Cela signifie qu'un développeur n'aurait qu'à mettre à jour le HTML ; l'"arbre" CSS serait synchronisé pour refléter l'état actuel du DOM. Un éditeur intelligent vous permettrait d'accéder à la définition CSS d'un élément/classe pour le styliser, voire de rendre ses règles de style visibles dans un panneau distinct.
D'une certaine manière, cela ressemble presque à un retour en arrière, comme une fonction que l'on trouverait dans Dreamweaver ou WebAssist pour aider les débutants à apprendre les CSS. Mais l'idée de base d'un outil d'optimisation des sélecteurs CSS semble être une évidence, et le type d'automatisation du flux de travail que j'ai décrit serait la prochaine étape logique - et le catalyseur serait le filtre de spécificité.
J'ai examiné certains des éditeurs CSS et IDE Web les plus connus, mais je n'ai rien trouvé qui offre ce type de fonctionnalité au-delà du ciblage d'un seul élément et de la génération d'un sélecteur pour celui-ci.
Mise à jour 2 : Performances des sélecteurs CSS
En réponse au commentaire de Spliff, voici deux excellents articles sur les performances des sélecteurs CSS :
-
Impact des sélecteurs CSS sur les performances par Steve Souders
-
Rendu efficace des CSS par Chris Coyier
Tous deux s'accordent à dire que la micro-optimisation de CSS ne vaut pas la peine, mais que les sélecteurs descendants surqualifiés sont "un désastre en termes d'efficacité". Je n'ai pas encore effectué d'analyse comparative moi-même, mais je soupçonne que le type d'approche "DOM Mapping" que je suggère entraînerait une baisse des performances sans une étape d'optimisation, qu'elle soit manuelle ou automatisée.
Questions, liens et outils connexes :
Outil pour voir la spécificité des CSS
Les 5 principales erreurs de Massive CSS