2013-03-17 17 views
74

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 funkcję "rozszerzania"?

Czy funkcja MNIEJ ma również tę funkcję?

+0

Dla wyjaśnienia, inne referencje pytanie nie prosi samo. To pytanie jest proste: "Czy MNIEJ ma funkcję rozszerzoną?". Drugie pytanie to pytanie, które wymaga dużo więcej przemyśleń dotyczących decyzji dotyczących stylizacji. – jonschlinkert

+0

... aby dodać do mojego ostatniego komentarza, drugie pytanie zawiera znacznik "stylu kodowania", który dodatkowo wspiera mój punkt. – jonschlinkert

Odpowiedz

133

Tak, less.js wprowadził extend w v1.4.0.

:extend() 

Zamiast realizacji w temperaturze reguły (@extend) składni przez SASS i rysika, mniej realizowane składni pseudo klasy, który zapewnia realizacja MNIEJ na elastyczność być stosowane bezpośrednio do przełącznika sam lub wewnątrz oświadczenie. Tak więc oba te będą działać:

.sidenav:extend(.nav) {...} 

lub

.sidenav { 
    &:extend(.nav); 
    ... 
} 

Dodatkowo można użyć dyrektywy all przedłużyć "zagnieżdżone" klas, a także:

.sidenav:extend(.nav all){}; 

i można dodać rozdzielana przecinkami lista klas, które chcesz rozszerzyć:

.global-nav { 
    &:extend(.navbar, .nav all, .navbar-fixed-top all, .navbar-inverse); 
    height: 70px; 
} 

Przedłużając zagnieżdżone 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){}; wyjścia:

.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; 
} 
+14

"Składnia LESS jest bardziej" wierna "tradycyjnemu CSS niż składnia reguły" at "(wdrożona przez SASS i Stylus), która jest zwykle zarezerwowana dla instrukcji lub instrukcji dla parsera CSS w przeglądarce." <- co do cholery ma to znaczyć? Pachnie jak marketing. – cimmanon

+1

pozwól nam [kontynuować tę dyskusję na czacie] (http://chat.stackoverflow.com/rooms/26336/discussion-between-steveax-and-jonschlinkert) – steveax

+2

@imimmanon Myślę, że masz rację, nie miałem na myśli to brzmi w ten sposób. Ale istnieje wiele kontrowersji na temat składni Less, pozornie, ponieważ ludzie oczekiwali, że Less będzie używać tej samej składni co SASS. Ale w CSS, selektory pseuso są używane do reguł porównywania wzorców w celu ustalenia, które reguły stylu odnoszą się do elementów w drzewie dokumentu, podczas gdy reguły at są używane dla dyrektyw "wyższego poziomu" (jak wspomniałem).Więc może powinienem edytować odpowiedź, aby podać ten szczegół? Czy jest to inne pytanie: "Dlaczego LESS wybrał pseudo-selektorową składnię?" – jonschlinkert

Powiązane problemy