当布尔值不为真时,如何执行LESS保护?

时间:2013-09-20 05:31:05

标签: css less guard not-operator

embeddable是一个自定义的LESS PHP函数,它返回一个布尔值。

当布尔函数返回true时,我可以使用LESS(lessphp)保护执行某些操作:

.my-mixin(@url) when(embeddable(@url)) {
    background-color: #abc;
}

.smallClass {
    .my-mixin('small.png');
}

它产生:

.smallClass {
    background-color: #abc;
}

正如所料。

为真时(非操作员),我该怎么做。显而易见:

.my-mixin(@url) when(embeddable(@url)) {
        background-color: #abc;
}

.my-mixin(@url) when(not(embeddable(@url))) {
        background-color: #389;
}

.bigClass {
        .my-mixin('big.png');
}

与使用它的块一起静默删除。注意,我保留了守卫的真实版本,所以如果谓词错误,应该使用真正的版本。然后我尝试了:

.my-mixin(@url) when(!embeddable(@url)) {
    background-color: #389;
}

代替非版本。

mixin只保存在CSS中(而不是编译),尝试使用它的bigClass块仍然会被静默删除。

同样:

.my-mixin(@url) when(embeddable(@url) != true) {
        background-color: #389;
}

1 个答案:

答案 0 :(得分:5)

正确的LESS语法

请注意以下not版代码中的更改:

.my-mixin(@url) when (embeddable(@url)) {
        background-color: #abc;
}

.my-mixin(@url) when not (embeddable(@url)) {
        background-color: #389;
}

.bigClass {
        .my-mixin('big.png');
}

注意

根据lesscss.org site,“关键字true是唯一的真值”,这可能有些令人困惑。在您的示例中,这意味着PHP函数需要返回值true以获得true mixin的命中,其他任何内容都将为false。如果您要传递1(通常在编程语言中被认为是真的),或者即使您从示例'big.png'传递它也不会匹配为true,因此以图形方式(就好像该值已经过去一样) ),这些是各种传递组合的结果:

.my-mixin('big.png') when (true) <-- evaluates to TRUE
.my-mixin('big.png') when (1) <-- evaluates to FALSE
.my-mixin('big.png') when ('big.png') <-- evaluates to FALSE (most confusing)
.my-mixin('big.png') when ('true') <-- evaluates to FALSE (as it is a string)

关于LESS这个“真实”方面的进一步讨论,请参阅this SO answer