Ne pensez pas aux classes CSS comme des classes orientées objet, pensez-y simplement comme un outil parmi d'autres sélecteurs pour spécifier les classes d'attributs par lesquelles un élément html est stylisé. Considérez tout entre les accolades comme la classe d'attributs , et les sélecteurs sur le côté gauche indiquent aux éléments qu'ils sélectionnent pour hériter des attributs de la classe d'attributs . Exemple:
.foo, .bar { font-weight : bold; font-size : 2em; /* attribute class A */}
.foo { color : green; /* attribute class B */}
Lorsqu'un élément est donné l'attribut class="foo"
, il est utile de penser non pas comme héritant des attributs de la classe .foo
, mais de classe attribut A et classe d'attributs B . C'est-à-dire que le graphe d'héritage a un niveau de profondeur, avec des éléments dérivés des classes d'attributs , et les sélecteurs spécifiant où vont les arêtes, et déterminant la priorité quand il y a des attributs concurrents (similaire à l'ordre de résolution des méthodes).
L'implication pratique pour la programmation est la suivante. Supposons que vous ayez la feuille de style indiquée ci-dessus et que vous souhaitiez ajouter une nouvelle classe .baz
, où elle devrait avoir la même chose font-size
que .foo
. La solution naïve serait la suivante:
.foo, .bar { font-weight : bold; font-size : 2em; /* attribute class A */}
.foo { color : green; /* attribute class B */}
.baz { font-size : 2em; /* attribute class C, hidden dependency! */}
Chaque fois que je dois taper quelque chose deux fois, je suis tellement en colère! Non seulement je dois écrire deux fois, maintenant je n'ai aucun moyen d'indiquer que programatically .foo
et .baz
doit avoir la même font-size
, et je l' ai créé une dépendance cachée! Mon paradigme ci-dessus suggère que je devrais extraire l' font-size
attribut de la classe d'attributs A :
.foo, .bar, .baz { font-size : 2em; /* attribute base class for A */}
.foo, .bar { font-weight : bold; /* attribute class A */}
.foo { color : green; /* attribute class B */}
La plainte principale ici est que maintenant je dois retaper chaque sélecteur de classe attribut A nouveau de préciser que les éléments qu'ils doivent sélectionner les attributs devraient hériter de la classe de base de l' attribut A . Pourtant, les alternatives sont de ne pas oublier de modifier chaque classe d'attributs où il y a des dépendances cachées à chaque fois que quelque chose change, ou d'utiliser un outil tiers. La première option fait rire Dieu, la seconde me donne envie de me tuer.