Less.js: 変数がサブメディアクエリに使用されている場合、無効なネストされたメディアクエリが「or」条件とマージされます

作成日 2016年09月20日  ·  5コメント  ·  ソース: less/less.js

無効なメディアクエリは、OR条件(コンマまたは "または"-キーワードのいずれか)を含むメディアクエリ定義を含む変数を使用するとコンパイルされます。 トップメディアクエリは、各サブクエリの前に追加する必要があります。

以下:

<strong i="7">@highdpi</strong>: ~"(-webkit-min-device-pixel-ratio: 1.25), (min-device-pixel-ratio: 1.25), (min-resolution: 1.25dppx)";
.bg {
    <strong i="8">@media</strong> (max-width: 1000px) {
        background: url(bg-small.png);

        <strong i="9">@media</strong> <strong i="10">@highdpi</strong> {
            background: url([email protected]);
        }
    }
}

出力:

<strong i="14">@media</strong> (max-width: 1000px) {
  .bg {
    background: url(bg-small.png);
  }
}
<strong i="15">@media</strong> (max-width: 1000px) and (-webkit-min-device-pixel-ratio: 1.25), (min-device-pixel-ratio: 1.25), (min-resolution: 1.25dppx) {
  .bg {
    background: url([email protected]);
  }
}

期待される出力-"(max-width:1000px)および"各コンマ区切り部分の前:

[...]
<strong i="19">@media</strong> (max-width: 1000px) and (-webkit-min-device-pixel-ratio: 1.25), (max-width: 1000px) and (min-device-pixel-ratio: 1.25), (max-width: 1000px) and (min-resolution: 1.25dppx) {
[...]

_一方、変数を使用しない場合は正常にコンパイルされます:_

.bg {
    <strong i="23">@media</strong> (max-width: 1000px) {
        background: url(bg-small.png);

        <strong i="24">@media</strong> (-webkit-min-device-pixel-ratio: 1.25), (min-device-pixel-ratio: 1.25), (min-resolution: 1.25dppx) {
            background: url([email protected]);
        }
    }
}
consider closing feature request needs decision stale

最も参考になるコメント

これはバグというよりも機能のリクエストです。 Lessは、これらの~""内部にあるものを理解することは想定されていません(メディアクエリだけでなく、どこでも)。 したがって、Lessは、そこにあるコンマやその他の特殊記号について決して知らないことが予想されます。

技術的には、上記のようなコード(「エスケープされた文字列内のメディアクエリのリスト」)は、適切なコードと見なされるというよりも、古い癖/構文の回避策に似ています(ただし、 ~""自体が原因です)。 今日のLessでは、同じことを実現するための適切なパターンは、「魔法の値変数」の代わりに匿名/デタッチされたルールセット/ミックスインを使用することです。

.highdpi(@rules) {
    <strong i="10">@media</strong> (-webkit-min-device-pixel-ratio: 1.25), 
           (min-device-pixel-ratio: 1.25), 
           (min-resolution: 1.25dppx) {
        @rules();
    }
}

.bg {
    <strong i="11">@media</strong> (max-width: 1000px) {
        background: url(bg-small.png);

        .highdpi({
            background: url([email protected]);
        });
    }
}

または同様の方法。

#1421および同様の問題/リクエストに関連しています。


機能リクエストとしても(提案されている場合)、この機能はとにかく~""代わりに異なる構文を使用する必要があることに注意してください。つまり、例は上記のように機能することは想定されていません。したがって、これを「」とマークしていません。機能要求」(FRにはもう少し洞察が必要になるため)。

多分#1421にマージしますか?

全てのコメント5件

これはバグというよりも機能のリクエストです。 Lessは、これらの~""内部にあるものを理解することは想定されていません(メディアクエリだけでなく、どこでも)。 したがって、Lessは、そこにあるコンマやその他の特殊記号について決して知らないことが予想されます。

技術的には、上記のようなコード(「エスケープされた文字列内のメディアクエリのリスト」)は、適切なコードと見なされるというよりも、古い癖/構文の回避策に似ています(ただし、 ~""自体が原因です)。 今日のLessでは、同じことを実現するための適切なパターンは、「魔法の値変数」の代わりに匿名/デタッチされたルールセット/ミックスインを使用することです。

.highdpi(@rules) {
    <strong i="10">@media</strong> (-webkit-min-device-pixel-ratio: 1.25), 
           (min-device-pixel-ratio: 1.25), 
           (min-resolution: 1.25dppx) {
        @rules();
    }
}

.bg {
    <strong i="11">@media</strong> (max-width: 1000px) {
        background: url(bg-small.png);

        .highdpi({
            background: url([email protected]);
        });
    }
}

または同様の方法。

#1421および同様の問題/リクエストに関連しています。


機能リクエストとしても(提案されている場合)、この機能はとにかく~""代わりに異なる構文を使用する必要があることに注意してください。つまり、例は上記のように機能することは想定されていません。したがって、これを「」とマークしていません。機能要求」(FRにはもう少し洞察が必要になるため)。

多分#1421にマージしますか?

@ seven-phases-maxこれをクリアしていただきありがとうございます。 エスケープされた文字列を持つ変数の代わりに、別の「.highdpi」ミックスインを使用するようにミックスインを変更します。

@ Seven-phases-maxここには2つの別々の問題/機能要求があると思うので、それらを指定せずに#1421にマージする必要があるかどうかはわかりません。

  1. Lessパーサーが式とリストでより緩くなるようにします。 たとえば、リストをメディアクエリ値またはセレクターで構成できるようにします。 そのため、メディアクエリを変数にしたい場合は、文字列のエスケープが要件である必要はありません。 (これは一般的なニーズです。)これは#1421であり、 @ mediaの例はその問題に追加されたものである可能性があります。
  2. ネストされたメディアクエリ値のマージリストが(に依存#1 、しかしから失敗/別のパスを持っている必要があります#1 。行われたが、その#1#2これは論理的な次のステップです。したがって、ここ#2964で追跡できると思います。

本質的にはほとんど同じ問題なので、ここで#3059を参照します。 つまり、基本的に問題は、「変数がそれらの値に置き換えられた@media@supportsクエリなどのフル機能の再解析を行う余裕がありますか?」です。 (これには、パーサー自体を大幅にリファクタリングして、任意の瞬間に任意の文字列で使用できるようにするか、特定の各ノードとそのeval / css-gen関数で解析コードを複製する必要があります)。

この問題は、最近のアクティビティがないため、自動的に古いものとしてマークされています。 それ以上のアクティビティが発生しない場合は閉じられます。 貢献していただきありがとうございます。

このページは役に立ちましたか?
0 / 5 - 0 評価