SASS tiene una característica llamada @extend
que permite que un selector herede las propiedades de otro selector, pero sin copiar las propiedades (como mixins).
¿LESS también tiene esta función?
SASS tiene una característica llamada @extend
que permite que un selector herede las propiedades de otro selector, pero sin copiar las propiedades (como mixins).
¿LESS también tiene esta función?
Respuestas:
Sí, Less.js introducido extend
en v1.4.0 .
:extend()
En lugar de implementar la @extend
sintaxis at-rule ( ) utilizada por SASS y Stylus, LESS implementó la sintaxis de pseudo-clase, que le da a la implementación de LESS la flexibilidad de ser aplicada directamente a un selector o dentro de una declaración. Entonces ambos funcionarán:
.sidenav:extend(.nav) {...}
o
.sidenav {
&:extend(.nav);
...
}
Además, puede usar la all
directiva para extender las clases "anidadas" también:
.sidenav:extend(.nav all){};
Y puede agregar una lista separada por comas de las clases que desea extender:
.global-nav {
&:extend(.navbar, .nav all, .navbar-fixed-top all, .navbar-inverse);
height: 70px;
}
Al extender selectores anidados, debería notar las diferencias:
selectores anidados .selector1
y selector2
:
.selector1 {
property1: a;
.selector2 {
property2: b;
}
}
Ahora .selector3:extend(.selector1 .selector2){};
salidas:
.selector1 {
property1: a;
}
.selector1 .selector2,
.selector3 {
property2: b;
}
, .selector3:extend(.selector1 all){};
salidas:
.selector1,
.selector3 {
property1: a;
}
.selector1 .selector2,
.selector3 .selector2 {
property2: b;
}
, .selector3:extend(.selector2){};
salidas
.selector1 {
property1: a;
}
.selector1 .selector2 {
property2: b;
}
y finalmente .selector3:extend(.selector2 all){};
:
.selector1 {
property1: a;
}
.selector1 .selector2,
.selector1 .selector3 {
property2: b;
}
@extend
sintaxis at-rule ( ) implementada por SASS y Stylus, que normalmente se reserva para dar instrucciones o directivas al analizador CSS en el navegador". <- ¿Qué diablos se supone que significa esto? Huele a hablar de marketing.
.sibling-1 {
color: red
}
.sibling-2 {
background-color: #fff;
.sibling-1();
}
Salida
.sibling-1 {
color: red
}
.sibling-2 {
background-color: #fff;
color: red
}