检查是否在SASS中定义了变量

时间:2011-12-14 22:43:18

标签: ruby sass

如标题所示我试图检查是否在SASS中定义了变量。 (如果产生任何不同的差异,我会使用指南针)

我找到了Ruby等价物:

defined? foo

在黑暗中拍摄,但它只是给了我错误:

defined": expected "{", was "?

我找到了一个解决方法(这显然只是为了在所有情况下定义变量,在这种情况下它实际上更有意义)但我真的想知道这是否可行未来

3 个答案:

答案 0 :(得分:101)

对于Sass 3.3及更高版本

从Sass 3.3开始,有一个variable-exists()函数。来自the changelog

  
      
  • 现在可以使用这些新函数确定是否存在不同的Sass结构:      
        
    • variable-exists($name)检查变量是否在当前范围内解析。
    •   
    • global-variable-exists($name)检查是否存在给定名称的全局变量。   ...
    •   
  •   

使用示例:

$some_variable: 5;
@if variable-exists(some_variable) {
    /* I get output to the CSS file */
}
@if variable-exists(nonexistent_variable) {
    /* But I don't */
}

对于Sass 3.2.x及更早版本(我的原始答案)

我今天遇到了同样的问题:尝试检查是否设置了变量,如果是这样,添加样式,使用mixin等。

在阅读isset()函数isn't going to be added to sass之后,我找到了一个使用!default关键字的简单解决方法:

@mixin my_mixin() {
  // Set the variable to false only if it's not already set.
  $base-color: false !default;

  // Check the guaranteed-existing variable. If it didn't exist 
  // before calling this mixin/function/whatever, this will 
  // return false.
  @if $base-color {
     color: $base-color;
  }
}

如果false是变量的有效值,则可以使用:

@mixin my_mixin() {
  $base-color: null !default;

  @if $base-color != null {
     color: $base-color;
  }
}

答案 1 :(得分:4)

如果您要寻找逆数,那就是

@if not variable-exists(varname)

要检查它是否未定义或伪造:

@if not variable-exists(varname) or not $varname

如果您只想在未定义或为空的情况下进行设置

$varname: VALUE !default;

答案 2 :(得分:2)

作为补充答案-对于某些用例,您应该查看default关键字。如果尚未定义变量,则可以为变量分配默认值。

  

如果尚未分配变量,可以添加   !default标志到值的末尾。这意味着如果   变量已被分配,但不会重新分配,但是如果   它还没有值,它将被赋予一个值。

示例:

在specific-variables.scss中,您拥有:

$brand: "My Awesome Brand";

在default-variables.scss中,您具有:

$brand: company-name !default;
$brand-color: #0074BE !default;

您的项目的构建如下:

@import“ specific-variables.scss”; @import“ default-variables.scss”; @import“ style.scss”;

品牌价值将为我的超凡品牌,品牌颜色价值将为#0074BE