Less.js: 有効なカスタムプロパティ倀の解析に倱敗するこずが少なくなりたす䟋@apply polyfill

䜜成日 2015幎10月21日  Â·  34コメント  Â·  ゜ヌス: less/less.js

このコヌドは壊れたす

paper-drawer-panel {
  --paper-drawer-panel-left-drawer: {
    background-color: red;
  };
}

プロパティ倀の䞭括匧はパヌサヌを壊したす。

Polymerで䜿甚されおいる@apply構文をLESSでサポヌトしたいず思いたす。
https://www.polymer-project.org/1.0/docs/devguide/styling.html#custom -css-mixins

たた詊した

paper-drawer-panel {
  <strong i="14">@ruleset</strong>: {
    prop: value;
  };
  --paper-drawer-panel-left-drawer: %(~"%d", @ruleset);
}

パヌサヌを壊すこずはありたせんでしたが、配信されたした

paper-drawer-panel {
  --paper-drawer-panel-left-drawer: ;
}

これは明らかに望たしい動䜜ではありたせん。

bug feature request

最も参考になるコメント

これには仕様がありたす。 ポリフィルが存圚したす。 Chromeはそれを実装しおいたす。 Polymerはすでに1.0リリヌスでそれを䜿甚しおいたす。 そしおりェブサむトはすでにPolymerを䜿甚しおいたす。

Lessが最䜎限のレベルで構文をサポヌトするこずは、完党に合理的な期埅だず思いたす。

Lessはすでに@apply 、 --foo: bar; 、およびvar(--foo)を通過しおいたす。 足りないのは、他のcssブロックに䞎えられたのず同じ基本的な凊理で--foo: { property: value; }の{ ... }を通過するLessを取埗するこずだけです。 ハヌドストップしお解析゚ラヌをスロヌする代わりに。

党おのコメント34件

非CSS構文のサポヌトはLessの範囲を超えおいるのではないかず思いたす。 だから私の-1。

いずれにせよ、゚スケヌプを䜿甚しお出力に任意のコヌドを出力できるこずに泚意しおください。 䟋えば

xpaper-drawer-panel {
  --paper-drawer-panel-left-drawer: ~"{background-color: red;}";
}

たたは、よりハックな耇数行の方法で

paper-drawer-panel {
  -:~";--paper-drawer-panel-left-drawer: {";
    background-color: red;
    color: blue;
  -:~";}";
}

より耇雑な状況では、 <strong i="13">@import</strong> (inline)を䜿甚するこずも垞に可胜です。


%(~"%d", @ruleset);ような詊みの堎合-いいえ、Less倉数はマクロではなく、コンテキストに関係なく展開されたせん。特に名前のないルヌルセットの堎合、適切な構文はルヌルセット本䜓内の@ruleset()ず_not_asだけです。プロパティ倀。

非暙準の構文は䞀般的にサポヌトされるべきではないずいうこずに同意したす。

ただし、これは、倚くの堎合、LESSがPolymerず互換性がないこずを意味したす。

ずにかく返信ありがずうございたす。 +1

これが@ seven-phases-maxの決定に違いをもたらすかどうかはわかりたせんが、 @applyルヌルのオヌプンスペックがありたす。http//tabatkins.github.io/specs/css-apply-rule/  issue

たた、 https//github.com/Polymer/polymer/issues/1373も参照しお

そしおSASSはこのhttps://github.com/sass/sass/issues/1128に察凊しおいるようです

@ donny-dont泚私は䜕も決定したせん私は提案を閉じたせんでした-私はただの批評家です。

ええず、タブアトキンスはCSS暙準提案「アむデア」ず名付けられたを数十個生成したした。Googleの人たちはこれを明日でもブラりザにプッシュするかもしれたせんが、これはただCSSドラフトのものになるにはほど遠いですCSS varsはないこずを芚えおおいおください CSSの䞖界に玄10幎間入りたすか。

@ seven-phases-その圱響に぀いお最倧の謝眪。 ポリマヌがミックスむンの提案を掚進しおおり、 @ Jamtisが実際には䌝えおいなかった圢になったら、Chromeがそれを実装する可胜性が高いこずをメモしたいず思いたす。

私はLESSの䜿甚にかなり慣れおいたせんが、この皮のシナリオでパヌサヌ甚のプラグむンシステムはありたすか オンずオフを切り替えるこずができる実隓的な旗のようなものですか

ここで重耇するリク゚ストをリダむレクトできるように、これを再床開きたす。

/サブ

これには仕様がありたす。 ポリフィルが存圚したす。 Chromeはそれを実装しおいたす。 Polymerはすでに1.0リリヌスでそれを䜿甚しおいたす。 そしおりェブサむトはすでにPolymerを䜿甚しおいたす。

Lessが最䜎限のレベルで構文をサポヌトするこずは、完党に合理的な期埅だず思いたす。

Lessはすでに@apply 、 --foo: bar; 、およびvar(--foo)を通過しおいたす。 足りないのは、他のcssブロックに䞎えられたのず同じ基本的な凊理で--foo: { property: value; }の{ ... }を通過するLessを取埗するこずだけです。 ハヌドストップしお解析゚ラヌをスロヌする代わりに。

CSS倉数の完党な仕様はLESSでサポヌトされるべきだず思いたす。 これが起こるこずを望みたす

@dantman

これには仕様がありたす。 ポリフィルが存圚したす。 Chromeはそれを実装しおいたす。 Polymerはすでに1.0リリヌスでそれを䜿甚しおいたす。 そしおりェブサむトはすでにPolymerを䜿甚しおいたす。

私にずっお、それはただあたり説埗力のある理由ではありたせん。 ぀たり、Google、Google、およびGoogleがこれを䜿甚しおいたす。 他のどこにも関心がポップアップするこずはなく、今埌もそうなる兆候はありたせん。

@ donny-いけない

私はLESSの䜿甚にかなり慣れおいたせんが、この皮のシナリオでパヌサヌ甚のプラグむンシステムはありたすか オンずオフを切り替えるこずができる実隓的な旗のようなものですか

プラグむンシステムはありたすが、解析の倉曎を盎接サポヌトしおいたせん。 ですから、それは簡単なこずではありたせん。

@dantman
これには仕様がありたす。 ポリフィルが存圚したす。 Chromeはそれを実装しおいたす。 Polymerはすでに1.0リリヌスでそれを䜿甚しおいたす。 そしおりェブサむトはすでにPolymerを䜿甚しおいたす。

私にずっお、それはただあたり説埗力のある理由ではありたせん。 ぀たり、Google、Google、およびGoogleがこれを䜿甚しおいたす。 他のどこにも関心がポップアップするこずはなく、今埌もそうなる兆候はありたせん。

この結論は、通垞のcssから倧幅に逞脱した、より独自仕様でサポヌトされおいない構文に぀いお話しおいる堎合に意味がありたす。 しかし、Lessがすでにネストを理解しおいお、問題の構文がCSSのブラケットマッチングベヌスの解析ルヌルに完党に適合し、呚囲のcssを壊さず、他の䞻芁なCSSプリプロセッサずポストプロセッサのいずれかが機胜しおいる堎合に、Lessが解析゚ラヌを生成しないこずに぀いお話したす。それをサポヌトするか、すでに機胜しおいたす。

この結論は、通垞のcssから倧幅に逞脱した、より独自仕様でサポヌトされおいない構文に぀いお話しおいる堎合に意味がありたす。 しかし、Lessがすでにネストを理解しおいお、問題の構文がCSSのブラケットマッチングベヌスの解析ルヌルに完党に適合し、呚囲のcssを壊さず、他の䞻芁なCSSプリプロセッサずポストプロセッサのいずれかが機胜しおいる堎合に、Lessが解析゚ラヌを生成しないこずに぀いお話したす。それをサポヌトするか、すでに機胜しおいたす。

無関係ではありたせん。 これは、Lessの分離されたルヌルセットず非垞によく䌌おいたす。 そしお、Lessに远加された他の「パススルヌ」のものの前䟋がありたす。 だから私は必ずしもそれに反察しおいるわけではありたせん。 珟時点でPolymerを超える䟡倀があるかどうかに぀いおは、懐疑的です。

CSS倉数の公匏サポヌトはここにリストされおいたす http 

デフォルトのCSS倉数サポヌトの最小ブラりザバヌゞョン

  • Chrome 49
  • Chrome for Android 51
  • Androidブラりザ51
  • Android47甹Firefox
  • Firefox 31
  • Safari 9.1
  • iOS Safari 9.3
  • Opera 36
  • Opera Mobile 37

ポリフィルがない堎合、これはおよそ65のグロヌバルブラりザ䜿甚量に盞圓したす。

耇数のCSS可倉ポリフィルがあり、それを実装しおいるブラりザヌず倧芏暡なブラりザヌプロバむダヌがそれを掚進しおいたす。 これは持っおいる䟡倀のある機胜のようです。

公匏仕様 https 

@stramelそれはこの問題ずは䜕の関係もありたせん。 CSS倉数はすでにLessでサポヌトされおいたす。 リク゚ストは玄@apply 、これはその仕様の䞀郚ではありたせん。

線集すべおのCSSカスタムプロパティ倀がサポヌトされおいるわけではありたせん。以䞋を参照しおください。

@ matthew-dean申し蚳ありたせんが、誀解したした。 ずにかく、+ 1CSSミックスむン/カスタムプロパティセットの堎合

@ matthew-deanサポヌトを枛らすための基準は䜕ですか 別のブラりザが実装されおいる堎合は、問題ありたせんか

@ donny-dont Lessはコミュニティプロゞェクトであるため、特定のバヌはありたせん。 しかし、はい、単䞀のブラりザを超えた䜕かがそれをより汎甚的な機胜にするでしょう。

誰かがこれを怜玢しおいる堎合私が行ったようにすべおのPolymer非暙準cssを別のファむルに入れ、inlineキヌワヌドを䜿甚しおlessファむルにむンポヌトできたす。 lessファむルは、less倉数ずポリマヌカスタムプロパティの間でむンタヌフェヌスする必芁がありたす。 しかし、ずにかく、それはポリマヌがそれを望んでいる方法です。 暙準からのすべおの逞脱を実装できるわけではないこずに同意したす。

これを再考するために、残念ながら私は問題の範囲に぀いお狭い芖野を持っおいたず思いたす。

぀たり、はい、 @applyは単なる提案ですが、関係なく、これは無効なCSSではありたせん。 もう違いたす。

paper-drawer-panel {
  --paper-drawer-panel-left-drawer: {
    background-color: red;
  };
}

私の間違いは、 @applyがカスタムプロパティ構文の拡匵を提案しおいるず思っおいたしたが、そうではありたせん。 䞊蚘の_IS_は有効なカスタムプロパティ倀であるため、Lessサポヌトに远加する必芁がありたす。 時間をかけおスペックを深く掘り䞋げおいたらよかったのに。 ここhttps//www.w3.org/TR/css-variables/#syntax。

Lessには、有効なCSSをサポヌトするずいう䞻芁な目暙があり、珟圚、カスタムプロパティ構文はすべおのブラりザヌに完党に実装されおいたす。 仕様は非垞に寛容であり、プロパティ倀の解析方法に倧きな倉曎が必芁になる堎合がありたす。 あなたはそれにほずんど䜕でも入れるこずができたす。 倀でどれだけクレむゞヌになるか、そしおブラりザがそれを蚱可するかどうかはわかりたせん。 しかし、私が仕様を読む方法では、それが敎圢匏であれば、ほずんどすべおが有効です。 ぀たり、「トップレベル」のセミコロントヌクンに遭遇するたでは、あらゆる皮類のものを䞭括匧たたは括匧で囲んで、気を玛らわせるこずができたす。

これは、PolymerのようなJavaScriptラむブラリがCSSを「ハッキング」しお、JSが読み取り可胜な堎所に宣蚀型のプロパティ/倀を配眮する可胜性が高くなっおいるこずを意味したす。これは、このCSS機胜の前には実際には䞍可胜でした。

だから👍できるだけ早く実装する。

これが有効なカスタムプロパティ構文であるこずを指摘しようずした人には申し蚳ありたせん。

関連 https 

これをバグず機胜リク゚ストの䞡方ずしおマヌクしおいるのは、aカスタムプロパティ倀を解析するクレヌムが少ないが、倱敗するこずがあるただし、い぀かは明確ではないが、b凊理する必芁のない倀のタむプが元の蚭蚈を超えおいるためです。 CSS自䜓でさえ、Lessは蚀うたでもなく、新しい機胜です。

カスタムプロパティ解析のLessテストに远加できる別のテスト。 これは、今日の時点で完党に有効なCSSです。

.test {
  --custom-function: () => { let x = 1; window['NAMESPACE'].doSomething(x); };
}

基本的に、䜕かが() []たたは{}に入るず、任意の文字をダンプできたす。 したがっお、䞊蚘の䟋ではセミコロンが枡されたす。 䞭括匧が䞀臎しお閉じられるたで開いおいる堎合、閉じおいるセミコロンをテストする前に、再垰的な解析が必芁です。

私はここでその䜜業を開始したしたが、これが正しいかどうかはただわかりたせん。 https://github.com/less/less.js/blob/edge/lib/less/parser/parser.js#L1326

_泚䞊蚘の行を芋お混乱しおいる人がいるかどうかを明確にするために、このJavaScriptは䜕もしたせん。 CSSは、それを長くお未知の匿名の倀ず芋なすだけです。_

基本的に、[]たたは{}に䜕かが入るず、任意の文字をダンプできたす。

うヌん、そうですか 私にずっお、 https //www.w3.org/TR/css-variables/#syntaxは、トヌクンそこにリストされおいるものを陀くがどこにでもあるように聞こえ内の倀に぀いおの任意の文字、たたは䜕も特定に぀いお述べおいたすか もちろんurl(...)でない限り

぀たり、 --var: ?; 、 --var: (?);たたは--var: [Ÿ];かが実際に有効ですか

これは䞀番䞊の関連セクションであり、私が誀解しおいる可胜性がありたす。

カスタムプロパティに蚱可されおいる構文は非垞に寛容です。 <declaration-value>プロダクションは、シヌケンスに<bad-string-token> 、 <bad-url-token> 、䞀臎しない<)-token> 、 <]-token>が含たれおいない限り、1぀以䞊のトヌクンの任意のシヌケンスに䞀臎したす。 <}-token> 、たたは「」の倀を持぀トップレベルの<semicolon-token>トヌクンたたは<delim-token>トヌクン。

したがっお、重芁なポむントは次のずおりです。

  1. トップレベルのセミコロントヌクンのみが重芁です。 私はそれを「他のマッチしたペアの䞭にない」ずいう意味だず解釈したすか しかし、私は「トップレベル」の意味を誀解しおいる可胜性がありたす。

  2. そのペヌゞに瀺されおいるJSの䟋は誀解を招く可胜性がありたす -foo: if(x > 5) this.width = 10;は有効です。しかし、スペヌスのない=確かに兞型的なCSSトヌクンではなく、 this.widthでもありたせん。 明確にするこずなく、たたブラりザでの゚ラヌ回埩の蚱容床を考えるず、解析゚ラヌを想定するこずはできないず思いたす。 カスタムアプリケヌションがある堎合でも、 @apply構文が䞀連のルヌルを䜿甚しお有効であるこずは_すでにわかっおいたす_。 したがっお、カスタムプロパティでは、 {}内で耇数のセミコロンを䜿甚できたす。 したがっお、この蚀語が䞀臎する() 、 [] 、 {}内の蚱容的な性質に぀いお䜕かを暗瀺しおいるこずは論理的です。 ここではわからないこずがたくさんありたす。カスタムプロパティに䜕が入るかを知らなくおも、特定の構造に埓っおいる限り、䜕でも入るこずができるず想定する必芁があるず思いたす「シヌケンスがそうでない限り」 <bad-string-token> 、 <bad-url-token> 、䞀臎しない<)-token> 、 <]-token> 、たたは<}-token> "を含み、そのプロパティをブラりザに枡したす。 ここでの目的は、解析を成功させるための最䜎限の芁件を䜜成しながら、開発者に最倧限の柔軟性を提䟛するこずだず思いたす。

したがっお、これを行うこずはできたせん。

.bar {
  --foo: {;
  --baz: ";
}

...構文では、耇数のセミコロンを含め、䜕でも入力できるようにする必芁がありたすが、完了したこずを認識できるようにする必芁があるためです。 そこで、䞀臎する匕甚笊/䞭括匧/括匧/括匧が圹立ちたす。 䜕らかの方法で構文を「閉じた」こずを瀺すこずができる限り、ここでの意図は、その構文内で必芁なこずを実行できるこずだず思いたす。

これに関しお

--var;、-var ;のいずれかです。 たたは--var[Ÿ]; 有効ですか

知りたせん。

それらを有効なものずしお扱う必芁がありたすか IMOはい。 わからない/わからないのですが、あたり問題なく正垞に解析できたす。

可胜な実装に぀いおは... ;たで䜕でも蚱可するこずは倧きな問題ではありたせんが、それでも少なくずも文字列、URL、ネストされた{}を凊理する必芁がありたす ;が含たれおいる可胜性があるため Lessコヌドがないこずを意味したす。

さらに䞀歩進んだのは、解析段階でそれを䞀皮のDR倖偎の{} ずしお扱い、さらに倚くのトヌクンを蚱可するこずですただし、できるので行き詰たりのように芋えたす ' t --var: (1 > 2) / {whatever} foo;ようなものにDRパヌサヌを再利甚したす

そしお最埌に、もっず䟿利なもののために、私は正盎に䜕も芋るこずができたせんが、いく぀かのLess機胜トヌクンずその評䟡が蚱可されたフル機胜のCSSトヌクンを曞く以倖に䜕もありたせん。

トップレベルのセミコロントヌクンのみが重芁です。 私はそれを「他のマッチしたペアの䞭にない」ずいう意味だず解釈したすか しかし、私は「トップレベル」の意味を誀解しおいる可胜性がありたす。

はい、 ;終了に぀いおだず確信しおいたす。 ぀たり、次のようになりたす。 --var: ";" url(;) {;};は有効で、 --var: ; {} foo;は無効です「トップレベル」である最初の;はステヌトメントを終了したす。
(;)だけではわかりたせんが。

明らかに、これは内郚にLessコヌドがないこずを意味したす。

私の唯䞀の考えは、カスタムプロパティを生成したい堎合に備えお、補間構文を蚱可できるずいうこずです。 しかし、それは「興味があればラりンド2」のようなアむデアかもしれたせん。

;だけではわかりたせんが。

私もそうではありたせんか スペックには解析の詳现がどこかに公開されおいるこずが倚いず思いたすがトヌクンパス図など、この堎合に存圚するかどうかはわかりたせん。 ステヌゞ1ずしお-䞀臎する{} 、 () 、および匕甚笊のみを必芁ずし、トップレベルの;ように芋えるたで匿名ノヌドに䜕かをダンプしたす。 䞀臎する角かっこ[]は必芁ないかもしれたせんが、それらも蚀及されおおり、他のすべおの郚分がそこにあるず、それはかなり些现なこずです。

特別にトヌクン化する必芁はないず思いたすし、これをDRのものず混ぜる必芁もありたせん。 結局のずころ、誰かが次のようになっおしたう可胜性がありたす。

.weird {
  --php: ($x = 5 /* + 15 */ + 5; echo $x;);
  --example: [My DR will be --this: { 
    blah: nope;
    --never mind i gave up;
    no wait here it --is: {
      lol: cats;
    }
  }];
}

蚀い換えれば、Lessにずっおは、カスタムプロパティのコンテンツを凊理するために手を拭く方がよいでしょう。

たた、Lessプラグむンの䜜成者が、ピヌスを取埗し、䞀臎するカスタムプロパティをLessパヌサヌを介しお送り返しお新しいノヌドを䜜成するビゞタヌプラグむンを䜜成するこずは技術的に実珟可胜です。 実際に行う必芁があるのは、コンテンツをルヌルノヌドにダンプし、ルヌルをカスタムプロパティずしおマヌクしおから、出力を忠実にダンプするこずだけです。

䞊蚘の䟋を倉曎した堎合、これは無効ず芋なされるこずに泚意しおください。

.weird {
  --example: [My DR will be --this: { 
    blah: nope;
    --never mind i gave up;
    no wait here it --is: {
      lol: cats;
   // missing matching }
  }];
}

「ノヌレスコヌド」

おそらく、しかしこれはダりングレヌドを意味したす-今のように次のように曞くこずができたす
--var: darken(red, 5%) + 1;
そしおそれは機胜したすが、 --fortran: read (*, *, iostat=ierr) radius, height; 機胜したせん:(

おそらくこれに察するオプションがありたす --oh-no-yet-another-option-for-custom-properties-to-be-parsed-one-way-or-another: on :)

おそらく、しかしこれはダりングレヌドを意味したす-今のように--vardarkenred、5;ず曞くこずができたす。 そしおそれは機胜したすが、-fortranのためにread*、*、iostat = ierrradius、height;それは機胜したせん:(

🀔ええず.....はい、私はあなたが䜕を意味するのかわかりたす、それはおそらく䜕らかの補間が必芁かもしれない理由ですか 基本的に、パヌサヌでは次のようなものを扱うこずができたす。

<strong i="8">@iostat</strong>: ierr;
--fortran: read (*, *, iostat=@{iostat}) radius, height;

// treat similar to:
--fortran: ~"read (*, *, iostat=@{iostat}) radius, height";

適切なマッチングトヌクンに関する前述の譊告がありたすか

぀たり....代替手段は、基本的に構文を゚スケヌプするこずをお勧めするこずです。 むンプレヌスCSSコヌドの倉曎が少ないず䟿利です。

はい、補間でうたくいきたす。 実隓的なオプションずしおDR-ike解析を行うのは良いこずですが、少なくずもそのようなカスタムプロパティのハッキングが広たるたで--javascript: 1 = 2; 、倚くの人が架空の--var: darken(red, 5%);を奜むず確信しおいたす。 

蚀い換えれば、私は䞡方の方法別々にたたは同時にで倧䞈倫です。

私はこれに察しおかなり堅牢な実装/゜リュヌションを持っおいるず思いたす。 テストでは、このスレッドのコヌド䟋をいく぀か䜿甚したした。 したがっお、カスタムプロパティ倀ず䞍明なat-rulesは、補間を可胜にするために、基本的に゚スケヌプされた匕甚笊で囲たれた倀ずしお扱われたす。 3213をチェックしおください。

修繕。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡