J'utilise Sass (.scss) pour mon projet actuel.
Exemple suivant:
HTML
<div class="container desc">
<div class="hello">
Hello World
</div>
</div>
SCSS
.container {
background:red;
color:white;
.hello {
padding-left:50px;
}
}
Cela fonctionne très bien.
Puis-je gérer plusieurs classes tout en utilisant des styles imbriqués.
Dans l'exemple ci-dessus, je parle de ceci:
CSS
.container.desc {
background:blue;
}
Dans ce cas, tout div.container
serait normalement red
mais div.container.desc
serait bleu.
Comment puis-je imbriquer cela à l'intérieur container
avec Sass?
Réponses:
Vous pouvez utiliser la référence du sélecteur parent
&
, elle sera remplacée par le sélecteur parent après la compilation:Pour votre exemple:
Le
&
sera complètement résolu, donc si votre sélecteur parent est lui-même imbriqué, l'imbrication sera résolue avant de remplacer le&
.Cette notation est le plus souvent utilisée pour écrire des pseudo-éléments et des classes :
Cependant, vous pouvez placer le
&
à pratiquement n'importe quelle position que vous aimez * , donc ce qui suit est également possible:Cependant, sachez que cela casse en quelque sorte votre structure d'imbrication et peut donc augmenter l'effort de recherche d'une règle spécifique dans votre feuille de style.
*: Aucun autre personnage que les espaces blancs n'est autorisé devant le
&
. Donc, vous ne pouvez pas faire une concaténation directe deselector
+&
-#id&
jetterait une erreur.la source
&
est lors de l'utilisation de pseudo-éléments et pseudo-classes. Par exemple:&:hover
.&
est utilisé à la fin d'une ligne, il place cette ligne au début du reste des classes à tous les autres niveaux. Vous pouvez combiner des éléments en faisant&.desc
sous.container
, ce qui y ajouterait .desc, résultant en.container.desc
Si tel est le cas, je pense que vous devez utiliser une meilleure façon de créer un nom de classe ou une convention de nom de classe. Par exemple, comme vous l'avez dit, vous voulez que la
.container
classe ait une couleur différente en fonction d'une utilisation ou d'une apparence spécifique. Tu peux le faire:SCSS
CSS
la source
.container--desc
et de vous retrouver sans résultat.La réponse de Christoph est parfaite. Parfois, cependant, vous voudrez peut-être monter plus d'un cours. Dans ce cas, vous pouvez essayer les fonctionnalités
@at-root
et#{}
css qui permettraient à deux classes racine de s'asseoir côte à côte en utilisant&
.Cela ne fonctionnerait pas (en raison de la
nothing before &
règle):Mais cela (en utilisant
@at-root plus #{&}
):la source