2012-08-15 35 views
2

我知道我可以@extend .foo:hover,但有沒有辦法擴展.foobar基本/默認屬性,而不擴展僞類的定義,例如:hover,:active等?Sass @extend base/default還沒有擴展僞類?

例如,我將如何更改以下內容以使.foobar僅擴展.foo的默認狀態?

.foo { 
    & { 
     color:blue; 
    } 
    &:hover { 
     background-color: black; 
    } 
} 

.foobar { 
    @extend .foo; 
    &:hover { 
      //As is, I have to override. Any better way? 
      background-color: transparent; 
    } 
} 

(如果沒有辦法用無禮的話要做到這一點,有沒有達到同樣的效果最佳方法是什麼?)

+0

@feeela Sass擴展是全部或沒有。不可能只擴展選擇器的一部分,如果這是你想要的,你必須重新思考如何選擇你的選擇器。 – cimmanon 2015-02-02 15:53:03

回答

10

你需要重寫你的選擇以這樣的方式,你只能恰好延長部分你想要的:

%foo { 
    color:blue; 
} 

.foo { 
    @extend %foo; 

    &:hover { 
     background-color: black; 
    } 
} 

.foobar { 
    @extend %foo; 

    &:hover { 
     background-color: transparent; 
    } 
} 

但是,這取決於你將如何將觸角延伸/重用你的包含.foo類,新@content指令可能是更好的路要走。

@mixin foo { 
    color: blue; 

    &:hover { 
     @content; 
    } 
} 

.foo { 
    @include foo { 
     background-color: black; 
    } 
} 

.foobar { 
    @include foo { 
     background-color: transparent; 
    } 
} 
+0

這應該如何工作?我和OP有同樣的問題,只想擴展基類,但是SASS做了很多額外的vodoo。閱讀\ @content的文檔,我看不到任何與@ @關係的關係...... – feeela 2015-02-02 15:33:38

+0

@feeela我已經改寫了答案。 '@ content'與'@ extend'無關,但有時候使用內容感知mixin會產生更緊湊的結果。 – cimmanon 2015-02-02 15:46:15