如果未设置,则设置LESS变量

时间:2013-08-24 03:37:25

标签: less

是否可以将LESS变量设置为给定值(如果尚未定义?)

我似乎只能找到solutions for SASS.

1 个答案:

答案 0 :(得分:7)

一个重要的评论:事实证明,对这种技巧的需求经常恰好是一个XY问题(由于误解较少的变量语义)。通常没有实际需要的实际用例(在Less中,总是定义一个默认值(因此它总是存在)被随意覆盖)。因此,在使用下面的技巧之前,请确保它不是something else you want actually


如果您需要为可以定义的相同范围(即全局或本地)提供此类变量,则非常简单(自v1.4.0起):

@bar: 41; // comment/uncomment to test

.define-bar-if-not-defined() {@bar: 42}
.define-bar-if-not-defined(); // exposes a variable only if it's not already in this scope

#using-global-bar {
    global-bar: @bar;
}

#using-local-bar {
    @bar: 43; // comment/uncomment to test
    .define-bar-if-not-defined();

    local-bar: @bar;
}

但是,如果您尝试将此方法用于本地范围中使用的全局/父范围变量,则此方法将不起作用(如果您不确定原始变量的范围时需要通用方法,则可能会出现问题可能来自):

#using-unknown-bar-in-local-scope {
    // ... some code ...

    .define-bar-if-not-defined(); // won't override local @bar (if any) but always overrides global and parent scope @bar

    bar: @bar;
}

在这种情况下,我不知道任何直接的解决方案(例如,没有人可以在保护表达式中使用一些内联javascript黑客攻击)