2015-04-03 38 views
1

我想要做的是一個mixin與一個可選參數包括或不包括選擇器周圍的規則。這裏是所期望的行爲:有條件選擇條件包裝規則

@include smth(true) => .class{ color:blue } 
@include smth(false) => color: blue 

我想是這樣的:

@mixin smth($selector:true){ 
    @if $selector { 
     .class{ 
    } 

    color: blue; 

    @if $selector{ 
     } 
    } 
} 

顯然用包圍@if指令裏面都是問題。所以我試着把@if的內容放在雙引號".class{"下,並使用插值#{".class{"}(有和沒有轉義字符\},所以它不會干擾,但不會影響工作
簡而言之,我不希望sass處理該@if的內容,但只是 「把它當成是」

UPDATE

從cimmanon答案我設法創造一個更一般的mixin:

@mixin conditional-wrap($condition, $selector){ 
    @if $condition{ 
    #{$selector}{ 
     @content 
    } 
    } 
    @else{ 
    @content 
    } 
} 

和S o我們現在可以做:

@mixin smth($selector:true){ 
    @include conditional-wrap($selector, '.class'){ 
     color: blue; 
    } 
} 
+1

投票關閉的打字錯誤(提示:你不能有更多的開放大括號比你關閉大括號)。 – cimmanon 2015-04-03 13:35:28

+0

你的意思是在同一個@if指令中嗎?因爲否則就沒有。 – Ghetolay 2015-04-03 13:40:18

+0

然後,你的嵌套是搞砸了,你需要找到一個編輯器,顯示匹配的花括號。 – cimmanon 2015-04-03 13:42:17

回答

0

薩斯是腳本語言。花括號是SCSS語法的一部分(就像任何其他使用大括號的語言:JavaScript,PHP,C/C++等),Sass不只是「照原樣」。 SASS(縮進)語法根本不使用花括號。每種語法的解析器都不相同,但是選擇器及其屬性的內部表示方式是相同的,生成CSS文件時輸出這些結構的方式也相同:根據輸出樣式適當插入大括號。總之,你想寫的東西是不可能的。

Sass不關心如何使用SCSS語法縮進代碼,它只關心匹配大括號。其結果是,你的mixin被這樣解釋:

@mixin smth($selector: true) { 
    @if $selector { 
     .class { 

     } 

     color: blue; 

     @if $selector { 

     } 
    } 
} 

什麼你可以做的卻是改變你的邏輯。

@mixin smth($selector: true) { 
    @at-root #{if($selector, selector-nest(&, '.class'), &)} { 
     color: blue; 
    } 
} 

社科院3.3或以上版本:

@mixin foo { 
    color: blue; 
} 

@mixin smth($selector: true) { 
    @if $selector { 
     .class { 
      @include foo; 
     } 
    } @else { 
     @include foo; 
    } 
} 
+0

Thks的解釋。你的第二個解決方案是我最初做的,但後來我意識到我最好使用2個mixin''smth'''和'''smthSelector''',而不是隻使用一個帶參數的。第一個解決方案看起來很有前途,我會尋找關於'''@ at-root''和'''selector-nest'''的信息。 – Ghetolay 2015-04-04 13:13:14

+0

你的第一個解決方案對我來說不起作用,這麼做的關鍵是避免在最終的CSS上重複同一個選擇器。當''selector''爲false時,由於''@ at-root'',我們將有兩次相同的選擇器。 – Ghetolay 2015-04-04 21:52:22

+0

@Ghetolay「不起作用」是對問題的無用描述。 Sassmeister說,它工作正常:http://sassmeister.com/gist/25ebc0956f781ff6746d – cimmanon 2015-04-04 22:22:38