usas tutorial tecnologia que instalación descripcion como sass

tutorial - En Sass, ¿cómo hace referencia al selector principal y excluye a cualquier abuelo?



sass vs css (2)

Tengo el siguiente código sass:

.class{ label{ color:#fff; .disabled &{color:#333; } } }

que salidas

.disabled .class label

¿Hay alguna manera de generar el selector principal sin incluir selectores de abuelos? Al igual que:

.disabled label


No hay manera de que yo sepa en SASS para escoger y elegir entre los selectores de antepasados ​​cuando se utiliza una referencia principal. Sin embargo, con su código, una pequeña reorganización puede obtener el mismo resultado:

label { .class & { color: #fff; } .disabled & { color:#333; } }

Compila para:

.class label { color: #fff; } .disabled label { color: #333; }


El selector principal siempre es una referencia a todo el selector resuelto del nivel previo de anidamiento. No existe el concepto de "padre" o "abuelo", especialmente cuando concatenan selectores o usan el selector de padres al final que enturbia el agua.

Descargo de responsabilidad: no recomiendo hacer esto a menos que realmente lo necesite .

Comenzando con Sass 3.4, puede extraer porciones de un selector usando & como una variable. Cuando se utiliza de esta manera, obtendrá una lista de cadenas de caracteres (que pueden enrutarse, etc.).

Extrayendo una parte o porción de un selector

Esta función usa el mismo estilo de argumentos que la función de corte de cadena:

@function selector-slice($sel, $start: 1, $end: -1) { $collector: (); @each $s in $sel { // calculate our true start and end indices when given negative numbers $_s: if($start > 0, $start, length($s) + $start + 1); $_e: if($end > 0, $end, length($s) + $end + 1); $c: (); @for $i from $_s through $_e { $c: append($c, nth($s, $i)); } // prevent duplicates from creeping in @if not index($collector, $c) { $collector: append($collector, $c); } } @return $collector; } /* complex example */ .one-a, .one-b { two { three { color: red; &:before { @at-root #{selector-slice(&, 2, 3)} { color: green; } } } } } /* your example */ .class { label { color:#fff; @at-root #{selector-slice(&, -1, -1)} { .disabled & { color:#333; } } } }

Salida:

/* complex example */ .one-a two three, .one-b two three { color: red; } two three:before { color: green; } /* your example */ .class label { color: #fff; } .disabled label { color: #333; }

Como una ventaja adicional, puede usar esta función para invertir el orden de los selectores pasando el índice más grande antes que el más pequeño.

.one-a, .one-b { two { three { color: red; &:before { @at-root #{selector-slice(&, 3, 2)} { color: green; } } } } }

Salida:

.one-a two three, .one-b two three { color: red; } three:before two { color: green; }

Relacionado: Modificar el medio de un selector en Sass (agregar / eliminar clases, etc.)

Reemplazar una clase con otra

Alternativamente, puede usar la función selector-replace de la biblioteca estándar si lo que desea hacer es reemplazar una clase por otra.

.class { label { color:#fff; @at-root #{selector-replace(&, ''.class'', ''.disabled'')} { color:#333; } } }

Salida:

.class label { color: #fff; } .disabled label { color: #333; }