Estou usando o Sass (.scss) para o meu projeto atual.
Exemplo a seguir:
HTML
<div class="container desc">
<div class="hello">
Hello World
</div>
</div>
SCSS
.container {
background:red;
color:white;
.hello {
padding-left:50px;
}
}
Isso funciona muito bem.
Posso lidar com várias classes enquanto estiver usando estilos aninhados.
No exemplo acima, estou falando sobre isso:
CSS
.container.desc {
background:blue;
}
Nesse caso, tudo div.container
seria normalmente, red
mas div.container.desc
seria azul.
Como posso aninhar isso por dentro container
com Sass?
Respostas:
Você pode usar a referência do seletor pai
&
, que será substituída pelo seletor pai após a compilação:Para o seu exemplo:
O
&
resolverá completamente, portanto, se o seletor pai estiver aninhado, o aninhamento será resolvido antes de substituir o&
.Essa notação é mais frequentemente usada para escrever pseudoelementos e -classes :
No entanto, você pode colocá-lo
&
em praticamente qualquer posição que desejar * , para que também seja possível o seguinte:No entanto, esteja ciente de que isso de alguma forma interrompe sua estrutura de aninhamento e, portanto, pode aumentar o esforço de encontrar uma regra específica na sua folha de estilo.
*: Nenhum outro caractere além de espaços em branco é permitido na frente do
&
. Portanto, você não pode fazer uma concatenação direta deselector
+&
-#id&
geraria um erro.fonte
&
é ao usar pseudo-elementos e pseudo-classes. Por exemplo:&:hover
.&
for usado no final de uma linha, ela será colocada no início do restante das classes em todos os outros níveis. Você pode combinar elementos, fazendo&.desc
sob.container
, o que acrescentar .Desc a ele, resultando em.container.desc
Se for esse o caso, acho que você precisa usar uma maneira melhor de criar um nome de classe ou uma convenção de nome de classe. Por exemplo, como você disse que deseja que a
.container
classe tenha cores diferentes de acordo com um uso ou aparência específica. Você consegue fazer isso:SCSS
CSS
fonte
.container--desc
e acabar sem resultados.A resposta de Christoph é perfeita. Às vezes, porém, você pode querer ter mais aulas do que uma. Nesse caso, você pode tentar os recursos
@at-root
e#{}
css que permitiriam que duas classes raiz se sentassem próximas uma da outra usando&
.Isso não funcionaria (devido à
nothing before &
regra):Mas isso seria (usando
@at-root plus #{&}
):fonte