Estoy usando Sass (.scss) para mi proyecto actual.
Siguiente ejemplo:
HTML
<div class="container desc">
<div class="hello">
Hello World
</div>
</div>
SCSS
.container {
background:red;
color:white;
.hello {
padding-left:50px;
}
}
Esto funciona muy bien.
¿Puedo manejar múltiples clases mientras uso estilos anidados?
En la muestra anterior, estoy hablando de esto:
CSS
.container.desc {
background:blue;
}
En este caso, todo div.container
sería normalmente red
pero div.container.desc
sería azul.
¿Cómo puedo anidar esto dentro container
con Sass?
Respuestas:
Puede usar la referencia del selector principal
&
, será reemplazado por el selector principal después de la compilación:Por su ejemplo:
Se
&
resolverá por completo, por lo que si su selector principal está anidado, la anidación se resolverá antes de reemplazar el&
.Esta notación se usa con mayor frecuencia para escribir pseudoelementos y clases :
Sin embargo, puede colocarlo
&
en prácticamente cualquier posición que desee * , por lo que también es posible lo siguiente:Sin embargo, tenga en cuenta que esto de alguna manera rompe su estructura de anidación y, por lo tanto, puede aumentar el esfuerzo de encontrar una regla específica en su hoja de estilo.
*: No se permiten otros caracteres que los espacios en blanco delante del
&
. Por lo tanto, no puede hacer una concatenación directa deselector
+&
-#id&
arrojaría un error.fuente
&
es cuando se usan pseudo-elementos y pseudo-clases. Por ejemplo:&:hover
.&
se usa al final de una línea, coloca esa línea al comienzo del resto de las clases en todos los demás niveles. Puede combinar elementos haciendo&.desc
bajo.container
, lo que añadirá .desc a ella, lo que resulta en.container.desc
Si ese es el caso, creo que necesita usar una mejor manera de crear un nombre de clase o una convención de nombre de clase. Por ejemplo, como dijiste, quieres que la
.container
clase tenga un color diferente de acuerdo con un uso o apariencia específica. Puedes hacerlo:SCSS
CSS
fuente
.container--desc
y termine sin resultados.La respuesta de Christoph es perfecta. A veces, sin embargo, es posible que desee ir a más clases de una. En este caso, podría probar las características
@at-root
y#{}
css que permitirían que dos clases raíz se sentaran una al lado de la otra usando&
.Esto no funcionaría (debido a la
nothing before &
regla):Pero esto (usando
@at-root plus #{&}
):fuente