【问题标题】:How to assign to a global variable in Sass?如何分配给 Sass 中的全局变量?
【发布时间】:2015-10-12 05:14:24
【问题描述】:

我运行这个 Sass 代码:

$a: 1;
@if 2 + 2 == 4 {
    $a: 2;
}
@debug $a;

我希望看到 2。但是,输出是:

Line 5 DEBUG: 1

我了解 Sass 在 @if 范围内创建了一个新的 $a 变量。如何更改此行为并将值分配给全局 $a

我使用 Sass 3.4.0。

【问题讨论】:

标签: scope sass variable-assignment


【解决方案1】:

当您使用 Sass 3.4+ 时,您应该将 !global 标志附加到您的变量声明中:

$a: 1;
@if 2 + 2 == 4 {
    $a: 2 !global;
}
@debug $a; // will output 2

SASS_REFERENCE变量声明中声明:

"变量仅在嵌套选择器级别内可用 他们被定义的地方。 如果它们是在任何嵌套之外定义的 选择器,它们无处不在。

SASS_CHANGELOG of 3.4+ 表明这种行为已经改变:

所有不在文档顶层的变量赋值现在 默认为本地如果有同名的全局变量 除非使用 !global 标志,否则不会被覆盖。

例如,$var: value !global 将全局分配给$var。可以使用feature-exists(global-variable-shadowing) 检测此行为。

【讨论】:

  • 这不是对所提问题的回答。
  • @cimmanon 这是答案的补充(也许我应该添加为评论)。这是!global 使用的理由,“理性”的方式不是“反复试验”..
  • 没有人要求理由或历史或其他任何事情。这不是一个论坛。答案是为了回答被问到的问题,而你不是在回答问题。
  • FWIW,在我看来,这非常接近实际答案。特别是,它确实包含解释需要使用!global 的文档。在这方面,这是一个比公认的更好的答案。剩下的就是让这个答案的作者实际提供必要的语法。鉴于其他答案已经提供了该语法,因此期望在此处显示它似乎是多余的。这个答案最多可以引用或以其他方式引用该方面的其他答案。
【解决方案2】:

通过反复试验,我找到了解决方案:我必须在作业中添加!global

$a: 1;
@if 2 + 2 == 4 {
    $a: 2 !global;
}
@debug $a;

【讨论】:

    猜你喜欢
    • 2014-12-03
    • 2017-06-25
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-05
    • 1970-01-01
    • 2016-06-25
    相关资源
    最近更新 更多