SASS ma funkcję o nazwie, @extend
która umożliwia selektorowi dziedziczenie właściwości innego selektora, ale bez kopiowania właściwości (takich jak mixins).
Czy LESS ma również tę funkcję?
SASS ma funkcję o nazwie, @extend
która umożliwia selektorowi dziedziczenie właściwości innego selektora, ale bez kopiowania właściwości (takich jak mixins).
Czy LESS ma również tę funkcję?
Odpowiedzi:
Tak, Less.js wprowadzony extend
w wersji 1.4.0 .
:extend()
Zamiast implementować @extend
składnię at-rule ( ) używaną przez SASS i Stylus, LESS zaimplementował składnię pseudoklasową, która daje implementacji LESS elastyczność do zastosowania bezpośrednio do samego selektora lub wewnątrz instrukcji. Więc oba z nich będą działać:
.sidenav:extend(.nav) {...}
lub
.sidenav {
&:extend(.nav);
...
}
Ponadto możesz użyć all
dyrektywy, aby rozszerzyć również „zagnieżdżone” klasy:
.sidenav:extend(.nav all){};
Możesz dodać listę klas oddzielonych przecinkami, które chcesz rozszerzyć:
.global-nav {
&:extend(.navbar, .nav all, .navbar-fixed-top all, .navbar-inverse);
height: 70px;
}
Przy rozszerzaniu zagnieżdżonych selektorów należy zauważyć różnice:
zagnieżdżone selektory .selector1
i selector2
:
.selector1 {
property1: a;
.selector2 {
property2: b;
}
}
Teraz .selector3:extend(.selector1 .selector2){};
wyświetla:
.selector1 {
property1: a;
}
.selector1 .selector2,
.selector3 {
property2: b;
}
, .selector3:extend(.selector1 all){};
wyjścia:
.selector1,
.selector3 {
property1: a;
}
.selector1 .selector2,
.selector3 .selector2 {
property2: b;
}
, .selector3:extend(.selector2){};
wyjścia
.selector1 {
property1: a;
}
.selector1 .selector2 {
property2: b;
}
i wreszcie .selector3:extend(.selector2 all){};
:
.selector1 {
property1: a;
}
.selector1 .selector2,
.selector1 .selector3 {
property2: b;
}
@extend
składnia at-rule ( ) implementowana przez SASS i Stylus, która jest zwykle zarezerwowana do wydawania instrukcji lub dyrektyw parserowi CSS w przeglądarce." <- co to do cholery ma znaczyć? Pachnie marketingiem.
.sibling-1 {
color: red
}
.sibling-2 {
background-color: #fff;
.sibling-1();
}
Wynik
.sibling-1 {
color: red
}
.sibling-2 {
background-color: #fff;
color: red
}