109 votes

Classes et sous-classes CSS

Est-il possible de faire cela autrement que ce que je fais parce que cela ne semble pas fonctionner ? Je veux pouvoir faire en sorte que les sous-classes qui sont sous une classe utilisent le CSS spécifique à cette classe.subclass.

CSS

.area1
{
    border:1px solid black;
}
.area1.item
{
    color:red;
}
.area2
{
    border:1px solid blue;
}
.area2.item
{
    color:blue;
}

HTML

<div class="area1">
    <table>
        <tr>
            <td class="item">Text Text Text</td>
            <td class="item">Text Text Text</td>
        </tr>
    </table>
</div>
<div class="area2"> 
    <table>
        <tr>
            <td class="item">Text Text Text</td>
            <td class="item">Text Text Text</td>
        </tr>
    </table>
</div>

Ainsi, je peux simplement utiliser class="item" pour les éléments relevant de la classe css parente "area1", "area2". Je sais que je peux utiliser class="area1 item" pour que cela fonctionne, mais je ne comprends pas pourquoi il faut être si prolixe à ce sujet. La sous-classe css ne devrait-elle pas regarder sous quelle classe parente elle se trouve pour la définir ?

Remarque : cela fonctionne dans IE (j'utilise 7 en ce moment), mais pas dans FF, donc je suppose que ce n'est pas une façon standard de faire du CSS.

193voto

Chad Birch Points 39087

Il faut juste ajouter un espace :

.area2 .item
{
    ...
}

0 votes

Je n'utilise pas vraiment les sous-classes moi-même...... quelqu'un peut-il me donner une raison pour laquelle cela serait nécessaire ?

2 votes

Les sous-classes ne sont qu'un moyen supplémentaire d'ajouter une spécificité supplémentaire à vos règles CSS lorsque cela est approprié. Vous pouvez avoir une classe principale, mais vous pouvez modifier la règle pour un élément en fonction de l'endroit où il se trouve dans le document.

78voto

bigmattyh Points 9167

Pour info, lorsque vous définissez une règle comme vous l'avez fait ci-dessus, avec deux sélecteurs enchaînés :

.area1.item
{
    color:red;
}

Ça veut dire :

Appliquez ce style à tout élément qui possède à la fois la classe "area1" et "item".

Par exemple :

<div class="area1 item">

Malheureusement, cela ne fonctionne pas dans IE6, mais c'est ce que cela signifie.

1 votes

C'est en fait la chose que je cherchais, merci de l'avoir expliqué !

0 votes

Je sais que c'est ancien mais voulez-vous dire "zone1" ou "article" au lieu de "zone1" et "article" ? Cela fait une différence significative.

0 votes

Merci beaucoup pour cette information, je me suis creusé la tête pour trouver une solution.

28voto

Parrots Points 10968

Votre problème semble être un espace manquant entre vos deux classes dans le CSS :

.area1.item
{
    color:red;
}

Devrait être

.area1 .item
{
    color:red;
}

14voto

MrChrister Points 2276

Voulez-vous obliger à ne sélectionner que les enfants ? http://css.maxdesign.com.au/selectutorial/selectors_child.htm

.area1
{
        border:1px solid black;
}
.area1>.item
{
    color:red;
}
.area2
{
    border:1px solid blue;
}
.area2>.item
{
    color:blue;
}

1 votes

Ce n'est pas ce que je pensais, mais c'est une bonne information pour le cas où je ne voudrais que des enfants directs. Merci !

0 votes

Je ne connaissais pas celle-là. Merci pour ça, M. Christer.

10voto

M4N Points 48758

Il suffit de mettre un espace entre .area1 et .item, par exemple :

.area1 .item
{
    color:red;
}

ce style s'applique aux éléments avec la classe item à l'intérieur d'un élément avec la classe area1.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X