2011-08-31 3 views
10

Dans le passé, j'ai beaucoup appris sur CSS, mais maintenant je ne me souviens pas comment réutiliser les styles.Comment réutiliser les styles?

Exemple:

J'ai quelques onglets avec classe tab et je peux les passer avec javascript. L'onglet actuellement sélectionné a une autre classe, active.

Leur style CSS:

.tab { 
    position: relative; 
    top: 0; 
    left: 0; 
    width: 100%; 
    padding: 15px 0 15px 0; 
    border: solid thin #CCC; 
    text-align: center; 
    font-weight: bold; 
    margin-bottom: 10px; 
    color: #272F42; 
    cursor: pointer; 
    background-color: white; 
} 

.active { 
    position: relative; 
    top: 0; 
    left: 0; 
    padding: 15px 0 15px 0; 
    border: solid thin #CCC; 
    text-align: center; 
    font-weight: bold; 
    margin-bottom: 10px; 
    color: #272F42; 
    cursor: default; 
    background-color: #FFCF75; 
} 

Les deux styles a beaucoup de styles Identic sauf 2, cursor et background-color. Donc, ma question est, comment puis-je résumer le style .tab et l'utiliser dans .Active?

Je veux réaliser quelque chose comme ceci:

.active { //extends .tab 
    cursor: default; 
    background-color: #FFCF75; 
} 

Merci.

Répondre

5

Vous pourriez, et devrait probablement, appliquer les deux classes à l'élément comme ceci:

<a class="tab active"></a> 

Si vous voulez une règle CSS pour la combinaison spécifique de ces deux classes, vous feriez comme ceci:

.tab { 
    position: relative; 
    top: 0; 
    left: 0; 
    width: 100%; 
    padding: 15px 0 15px 0; 
    border: solid thin #CCC; 
    text-align: center; 
    font-weight: bold; 
    margin-bottom: 10px; 
    color: #272F42; 
    cursor: pointer; 
    background-color: white; 
} 

.active 
{ 
    cursor: default; 
    background-color: #FFCF75; 
} 

.tab.active /* no space */ 
{ 
    /* styles for elements that are both .tab and .active */ 
    /* leaving .active reusable for things other than tabs */ 
    /* and allowing override of both .tab and .active */ 
} 

Cela vous permet d'éviter de faire des copies inutiles de vos déclarations de style ... et vous donne la spécificité de passer outre l'une des classes individuelles lorsqu'un élément est à la fois.

+0

Non, alors il aurait besoin des deux classes à la fois, et cela fait déjà "l'héritage" pour vous. – Ryan

+0

Exactement, mais vous pouvez gagner en spécificité pour remplacer l'une des deux autres classes. – canon

5

Remplacez la règle .tab par .tab, .active.

9

Utilisez les deux noms de classe dans l'attribut class. Dans la règle .active, définissez uniquement des styles différents comme vous l'avez déjà fait dans le deuxième exemple.

<div class="tab active"></div> 
+1

Pour développer un peu sur la réponse ci-dessus, ayez javascript _add_ la classe '.active' plutôt que d'échanger les classes. – steveax

+1

Je ne pense pas que ce soit ce que l'OP veut. Ils veulent savoir comment ils peuvent combiner les styles dans leur feuille de style. Voir l'exemple –

+0

J'ai décrit les meilleures pratiques utilisées dans le scénario décrit – Samich

2

Cet héritage de sélecteur est une fonctionnalité intéressante de SASS.

Si vous voulez coller avec CSS simple, regardez la section sur l'héritage des sélecteurs et vous pouvez voir comment le code SASS, avec @extend, est transformé en CSS standard.

+0

Bien sûr, cela vaut la peine. Très intéressant. J'ai aimé la façon dont ils étendent les styles. : D –

0

Vous pouvez appliquer plusieurs classes à un élément. Vous pouvez donc avoir un élément avec class = "tab actif" et avoir les deux spécifications.

3
.active, .tab { 
    ... full style of both here 
} 

.active { 
    ... the styles that differ from .tab 
} 
6

Pour ce faire. Combiner les styles et séparer avec une virgule. Ajoutez ensuite d'autres règles ciblant les différences.

.tab, .active { 
    position: relative; 
    top: 0; 
    left: 0; 
    width: 100%; 
    padding: 15px 0 15px 0; 
    border: solid thin #CCC; 
    text-align: center; 
    font-weight: bold; 
    margin-bottom: 10px; 
    color: #272F42; 
} 

.tab{ 
    cursor: pointer; 
    background-color: white; 
} 

.active { 
    cursor: default; 
    background-color: #FFCF75; 
} 

EDIT

Sur la base de votre commentaire

Je change actuellement les onglets en ajoutant un style .active à l'attribut de classe .

ce que je ferais:

HTML

<div class="tab"></div> 

CSS

.tab { 
    position: relative; 
    top: 0; 
    left: 0; 
    width: 100%; 
    padding: 15px 0 15px 0; 
    border: solid thin #CCC; 
    text-align: center; 
    font-weight: bold; 
    margin-bottom: 10px; 
    color: #272F42; 
    cursor: pointer; 
    background-color: white; 
} 

.active { 
    cursor: default; 
    background-color: #FFCF75; 
} 

Ensuite, il suffit ajouter ou supprimer la classe .active, laissant le .tab comme il est.

Tant que .active est plus bas dans la feuille de style, il écrasera les bits nécessaires.

+0

mmm ce que vous dites dans la dernière phrase était probablement la cause de mon erreur. Merci. –

0
  1. Vous pouvez extraire la classe de base avec des styles Identic et marquez vos éléments avec deux classes: .tab .base
  2. Vous pouvez utiliser le langage css dynamique sass ou less qui prend en charge les classes inhritance
0

Vous pouvez combiner. active dans .tab et remplacer les parties qui ont besoin de changer comme ceci:

.tab, .active { 
    position: relative; 
    top: 0; 
    left: 0; 
    width: 100%; 
    padding: 15px 0 15px 0; 
    border: solid thin #CCC; 
    text-align: center; 
    font-weight: bold; 
    margin-bottom: 10px; 
    color: #272F42; 
    cursor: pointer; 
    background-color: white; 
} 

.active { 
    cursor: default; 
    background-color: #FFCF75; 
} 
Questions connexes