2015-04-03 55 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