Sass检查变量是否传递给mixin

时间:2014-03-27 04:05:44

标签: variables sass

假设我有一个默认值为mixin的

$default: 1;

@mixin test($p : $default) {
    @if () {
        // Do something if $p was 4passed?
    } @else {
        // Do something if $p was not passed?
    }

}

如果我这样打电话给mixin,两个不同的是:

@include test(); // A
@include test(1);  // B

有没有办法可以区分默认(A)和覆盖默认(B)的默认值?

1 个答案:

答案 0 :(得分:67)

如果你稍微修改一下你的mixin会有效(因为你实际上需要将有问题的参数传递给@if指令。并且你希望将参数默认为null或{ {1}},这意味着没有通过任何事情。)

false

DEMO

如果要将其他值设置为默认值,则只需在if语句中检查该特定值(例如,“如果@mixin test($p: null) { @if ($p) { /* Do something if $p was passed */ } @else { /* Do something if $p was not passed */ } } 设置为默认值,则执行某些操作”)。在这里,您将如何通过设置变量的默认值来完成此操作,就像您在示例中所做的那样。但是,这不会区分“没有参数传递”和“传递的值等于默认值”。

$p

DEMO

但是对于corse你可以结合两种方法...检查是否有东西传递给@mixin test($p: $default) { @if ($p == $default) { /* Do something if $p is set to $default */ } @else { /* Do something else if $p is not $default */ } } (如果传递或不传递则做不同的事情),如果没有传递,则设置$p的值默认。

$p

DEMO

这应该适用于除@mixin test($p: null) { @if ($p) { /* Do something if argument passed */ } @else { /* Do something else if no argument passed. Set $p to default. */ $p: $default; } } 的布尔值之外的所有内容,因为falsenull都使用false指令验证false。因此,要允许传递@if作为参数值,您需要使用更具体的表达式。例如:

false

DEMO

瞧,这应该可以解决问题 - 除非你出于某种原因希望将... @if ($p != null) { ... 作为论据。然后你需要使用其他东西作为默认值,就像一个极不可能作为参数传递的字符串,例如null =)

DEMO