从mixin函数中覆盖全局变量

时间:2014-11-17 14:03:08

标签: less lessphp

所以我试图基于从无PHP编译器传入的变量来覆盖一些“全局”变量。

我不确定我做错了什么,或者由于范围而无法做到这一点?

编辑:在这种情况下,我正试图让身体的背景变红。

external.less

// From external less stylesheet that I can't/don't want to modify
@myColour: blue;

body {
    background: @myColour; // always blue
}

my.less

@import "external.less"

// My styles
.setResponsive(@responsive) when (@responsive = on) {
    @myColour: green;
}
.setResponsive(@responsive) when (@responsive = off) {
    @myColour: red;
}

@responsiveState: off; // actually being set from compiler
.setResponsive(@responsiveState);

div {
    .setResponsive(@responsiveState);
    background: @myColour; // red
}

http://codepen.io/anon/pen/gbOymJ

1 个答案:

答案 0 :(得分:0)

您正在使用Mixins as Functions

  

无法覆盖直接在调用者范围内定义的变量。

在您的情况下,@myColour: blue;.setResponsive(@responsiveState);都在同一范围内(主要范围)。所以你所尝试的是不可能的。

您应该在代码末尾重新声明所有变量(使用您用来设置@responsiveState的相同机制)