I'm using Sass (.scss) for my current project.
Following example:
HTML
<div class="container desc">
<div class="hello">
Hello World
</div>
</div>
SCSS
.container {
background:red;
color:white;
.hello {
padding-left:50px;
}
}
This works great.
Can I handle multiple classes while using nested styles.
In the sample above I'm talking about this:
CSS
.container.desc {
background:blue;
}
In this case all div.container
would normally be red
but div.container.desc
would be blue.
How can I nest this inside container
with Sass?
This question is related to
sass
If that is the case, I think you need to use a better way of creating a class name or a class name convention. For example, like you said you want the .container
class to have different color according to a specific usage or appearance. You can do this:
SCSS
.container {
background: red;
&--desc {
background: blue;
}
// or you can do a more specific name
&--blue {
background: blue;
}
&--red {
background: red;
}
}
CSS
.container {
background: red;
}
.container--desc {
background: blue;
}
.container--blue {
background: blue;
}
.container--red {
background: red;
}
The code above is based on BEM Methodology in class naming conventions. You can check this link: BEM — Block Element Modifier Methodology
Use &
SCSS
.container {
background:red;
color:white;
&.hello {
padding-left:50px;
}
}
https://sass-lang.com/documentation/style-rules/parent-selector
Christoph's answer is perfect. Sometimes however you may want to go more classes up than one. In this case you could try the @at-root
and #{}
css features which would enable two root classes to sit next to each other using &
.
This wouldn't work (due to the nothing before &
rule):
container {_x000D_
background:red;_x000D_
color:white;_x000D_
_x000D_
.desc& {_x000D_
background: blue;_x000D_
}_x000D_
_x000D_
.hello {_x000D_
padding-left:50px;_x000D_
}_x000D_
}
_x000D_
But this would (using @at-root plus #{&}
):
container {_x000D_
background:red;_x000D_
color:white;_x000D_
_x000D_
@at-root .desc#{&} {_x000D_
background: blue;_x000D_
}_x000D_
_x000D_
.hello {_x000D_
padding-left:50px;_x000D_
}_x000D_
}
_x000D_
Source: Stackoverflow.com