3

embeddedable は、ブール値を返すカスタム 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;
}

not バージョンの代わりに。

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は唯一の真実の値です」。あなたの例でこれが意味することは、ミックスインでtrueヒットするためにPHP関数が値を返す必要がtrueあり、それ以外はすべてfalseになるということです。渡す場合1(プログラミング言語では true と見なされることが多い)、または例から渡す場合でも'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 のこの「真実」の側面に関するさらなる議論については、この SO answerを参照してください。

于 2013-09-20T15:28:09.560 に答える