2013-03-17 170 views
74

SASS有一個名爲@extend的功能,它允許選擇器繼承另一個選擇器的屬性,但不需要複製屬性(如mixins)。LESS是否具有「擴展」功能?

LESS是否也有此功能?

+0

爲了澄清,其他問題引用不問同樣的事情。這個問題很簡單:「沒有擴展功能嗎?」。另一個問題是提出需要更多關於造型決定的思考。 – jonschlinkert 2013-03-17 20:42:50

+0

...添加到我的最後評論中,另一個問題包括「編碼風格」標籤,這進一步支持了我的觀點。 – jonschlinkert 2013-03-17 20:44:30

回答

133

是的,Less.js介紹extendv1.4.0

:extend() 

而不是執行由SASS和手寫筆使用的所述規則(@extend)語法,LESS實現的僞類的語法,這給LESS的實現的靈活性直接進行或者施加到選擇器本身,或內一份聲明。因此,這兩種都可以工作:

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

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

此外,還可以使用all指令延伸的 「嵌套」 類和:

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

,你可以添加以逗號分隔的您想要擴展的類別列表:

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

當延長嵌套選擇你應該注意到的差異:

嵌套選擇.selector1selector2

.selector1 { 
    property1: a; 
    .selector2 { 
    property2: b; 
    } 
} 

現在.selector3:extend(.selector1 .selector2){};輸出:

.selector1 { 
    property1: a; 
} 
.selector1 .selector2, 
.selector3 { 
    property2: b; 
} 

.selector3:extend(.selector1 all){};輸出:

.selector1, 
.selector3 { 
    property1: a; 
} 
.selector1 .selector2, 
.selector3 .selector2 { 
    property2: b; 
} 

.selector3:extend(.selector2){};輸出

.selector1 { 
    property1: a; 
} 
.selector1 .selector2 { 
    property2: b; 
} 

終於.selector3:extend(.selector2 all){};

.selector1 { 
    property1: a; 
} 
.selector1 .selector2, 
.selector1 .selector3 { 
    property2: b; 
} 
+14

「與SASS和Stylus實現的at-rule('@ extend')語法相比,LESS的語法對傳統的CSS更」忠實「,通常只用於向瀏覽器中的CSS解析器提供指令或指令。 < - 這應該是什麼意思?聞起來像營銷說話。 – cimmanon 2013-03-17 19:20:40

+1

讓我們[在聊天中繼續討論](http://chat.stackoverflow.com/rooms/26336/discussion-between-steveax-and-jonschlinkert) – steveax 2013-03-17 20:06:57

+2

@cimmanon我想你是對的,我不是指它聽起來那樣。但關於Less的語法有很多爭議,看起來是因爲人們希望使用與SASS相同的語法。但在CSS中,pseuso-selectors用於模式匹配規則,以確定哪些樣式規則適用於文檔樹中的元素,而at-rules用於「更高級別」指令(如我所述)。那麼也許我應該編輯答案來提供這些細節?或者是另一個問題:「爲什麼LESS選擇僞選擇器語法?」 – jonschlinkert 2013-03-17 20:31:52