3

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;
}
4

1 回答 1

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 网站,“关键字true是唯一的真实值”,这可能有点令人困惑。这在您的示例中意味着 PHP 函数需要返回该值true才能在 mixin 上获得成功true,而其他任何内容都是错误的。如果你要通过1(在编程语言中通常被认为是真的)或者即使你要从你的例子中通过'big.png'它也不会匹配到真,所以图形上(好像值已经通过了),这些是各种传递组合的结果:

.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 的这个“真实”方面的进一步讨论,请参阅这个 SO answer

于 2013-09-20T15:28:09.560 回答