如何在Sass中分配一个全局variables?
我运行这个Sass代码:
$a: 1; @if 2 + 2 == 4 { $a: 2; } @debug $a;
我期望看到2.然而,产出是:
Line 5 DEBUG: 1
我知道Sass在@if
范围内创build了一个新的$a
variables。 我怎样才能改变这种行为并为全局$a
赋值?
我使用Sass 3.4.0。
当你使用Sass 3.4+时,你应该把!global
标志附加到你的variables声明中:
$a: 1; @if 2 + 2 == 4 { $a: 2 !global; } @debug $a; // will output 2
关于variables声明的原始SASS_REFERENCE指出:
“variables只能在定义的嵌套select器的级别中使用, 如果它们是在任何嵌套的select器之外定义的,则它们在任何地方都是可用的。
但是3.4+的SASS_CHANGELOG显示这个行为已经改变了:
所有不在文档顶层的variables赋值现在默认是本地的 。 如果有一个同名的全局variables,除非使用
!global
标志,否则不会被覆盖。例如,
$var: value !global
将$var: value !global
分配给$var
。 这种行为可以使用feature-exists(global-variable-shadowing)
来检测。
通过反复试验,我find了一个解决scheme:我必须在任务中添加!global
。
$a: 1; @if 2 + 2 == 4 { $a: 2 !global; } @debug $a;