2017-08-27 1 views
0

Dans mon CSS, j'ai quelque chose comme ceci:Existe-t-il un moyen plus efficace d'écrire du CSS avec des classes ayant une relation un-à-plusieurs?

.classA .class1, 
.classA .class2, 
.classA .class3 a:hover, 
.classA .class4, 
.classA #id1, 
.classA .class5 
{ color: white;} 

.classA .class1, 
.classA .class6 
{ background-color: red;} 

etc ...

Depuis que je répète .classA tant, je me demandais s'il y a un moyen plus efficace d'écrire cela?

Mon cas d'utilisation:

Je styling différentes pages avec des éléments similaires, mais avec différentes combinaisons de couleurs. Donc plutôt que .classA j'ajoute une classe de .Orange à une page et disons, .vert à l'autre, .Blue à un tiers. Ensuite, j'applique respectivement les styles orange, vert et bleu aux éléments de ces pages.

.Orange .btn, 
.Orange .accordion-heading, 
.Orange .promo-box {color: orange; background: white;} 
.Orange h2 {color: orange;} 

.Green .btn, 
.Green .accordion-heading, 
.Green .promo-box {color: green; background: white;} 
.Green h2 {color: green;} 
+0

Que représentent réellement ces classes? "Relation un-à-plusieurs" n'explique pas beaucoup. – Ryan

+0

Vous appliquez fondamentalement des styles à .class2, .class3 etc. ici s'ils existent n'importe où dans .classA. Si ce n'est pas votre principale exigence, vous pouvez séparer les classes. – Amit

+0

Si vous devez spécifier .classA en tant que parent pour tous ces éléments, alors non, je ne peux pas y penser. Il serait beaucoup plus facile d'écrire ce code dans un préprocesseur comme LESS ou SASS, car vous pouvez simplement imbriquer toutes les autres classes sous .classA ou utiliser mixins pour répéter le code rapidement. – Jesse

Répondre

0

Vous n'avez pas besoin de répéter .classA à moins que vous le souhaitez pour qu'il ait préséance sur les autres sélecteurs. Lorsque vous utilisez des sélecteurs en tandem, comme dans votre exemple, vous augmentez la spécificité de la règle. Par exemple, prenez le code suivant:

.classA .class1 {color:red;} 
.class1 {color:white;} 

<div class="classA"> 
    <div class="class1">Text</div> 
</div> 

Le résultat est un texte de couleur rouge depuis votre première règle est plus spécifique que la seconde, même si le second vient plus tard dans l'ordre source.

spécification CSS stipule que la priorité de sélection est soumis à trois facteurs, dans l'ordre:

  1. Importance
  2. Spécificité
  3. de commande Source

Ainsi, la quantité de répétition de sélection est en grande partie jusqu'à la façon dont vous configurez votre feuille de style et le résultat souhaité. Plus d'informations ici:

https://developer.mozilla.org/en-US/docs/Learn/CSS/Introduction_to_CSS/Cascade_and_inheritance

+1

"Vous n'avez pas besoin de répéter .classA à moins que vous souhaitiez qu'il ait la préséance sur les autres sélecteurs."Je suppose que c'est exactement la raison pour laquelle le demandeur spécifie la classe .classA, pourquoi êtes-vous sûr qu'ils n'en ont pas besoin? – BoltClock

+0

Je ne suis pas sûr, et je suppose, comme vous l'êtes, puisque la question est vague La réponse correcte est non, vous ne pouvez pas, sauf si vous utilisez un pré-processeur.Dans tous les cas, la structure CSS peut se prêter à une myriade de solutions et plus d'informations peuvent aider le demandeur à mieux structurer son code. – jfeferman