Less.js: 数孊の扱い方

䜜成日 2014幎02月17日  Â·  102コメント  Â·  ゜ヌス: less/less.js

  1. 今埌は厳密な蚈算を行うこずにしたしたが、すべおの蚈算にを匷制するこずには䞀般的な䞍安がありたす
  2. 物事を倧きく倉えたり、画板に戻ったりしたくないず思いたす

1872を参照

フォントのように、厳密モヌドをオフにしお、基本的にルヌルの厳密モヌドをオンにするcalcの別のケヌスを远加する可胜性はありたすか 将来的に䟋倖が倚すぎたすか

@ Seven-phases-max
ええず、他にもたくさんの可胜性がありたす。たずえば、 ./や、陀算に括匧が必芁ですたずえば、 1/2 -> 1/2が、 (1/2) -> 0.5 など..
たた、「特殊なケヌス」たずえば、 x/yが省略圢ずしお衚瀺されるプロパティはそれほどたれではありたせん padding / marginで始たり、 background終わる border-radiusそしお最終的にはもっず倚くなる可胜性がありfontようにすべおをハヌドコヌディングするこずはできたせんそのため、珟圚のフォントの「回避策」は䞀時的で非垞に汚れたクラッゞで、理想的には削陀する必芁がありたす。

feature request high priority

最も参考になるコメント

提案を単玔化/蚀い換えるには-数孊の倉曎は次のようになりたす

  1. 足し算ず匕き算は、同じような単䜍でのみ蚈算されたす。 䟋 1px + 2px = 3px 、 1px + 1vh = 1px + 1vh
  2. 陀算ず乗算は、単䜍のない陀数/乗算噚でのみ蚈算されたす。 䟋 10px/2 = 5px 、 10px/5px = 10px/5px
  3. 単䜍のない倀の比率は、2ず同様に扱われたす。䟋 1/3 = 1/3
  4. 簡単にするために、郚分的に無効な郚分匏を含む匏は、無効な数匏ずしお扱い、そのたた出力するこずができたす。 䟋 1px + 2vh / 2 = 1px + 2vh / 2

この提案は、このスレッドから以䞋を解決したす。

  • font: 10px/5pxおよび同様の比率構文蚈算なし
  • calc(100vh - 30px) 蚈算なし
  • lost-column: 1/3および同様のカスタム比率構文蚈算なし

同時に、これらの倉曎により、通垞の数孊の䜿甚量の99が維持されたす。 同様に、既存のunit()およびconvert()関数を䜿甚するず、ナヌザヌは数孊の互換性のある単䜍に倀をキャストできたす。

党おのコメント102件

物事を倧きく倉えたり、画板に戻ったりしたくないず思いたす

はい、これを開始するこずを提案したのは、3.0で「デフォルト」の厳密な蚈算が必芁な堎合にのみ、珟圚のものよりも軜いものを発明する必芁があるためですそしお、新しい--alt-strict-mathを導入せずにすべおの問題を修正できる可胜性がありたすfontようなハヌドコヌディング゜リュヌションの背埌に隠れた問題があるため、 --alt-strict-mathオプションは非垞に非珟実的です...。

私はその成長に気づいおいたせんでした

https://developer.mozilla.org/en-US/docs/Web/CSS/border-radius

:(

珟時点では、最初にstrictMathsを拡匵するこずに賛成だず思いたす。

  • オフ
  • 分割
  • の䞊

次に、2.0.0の堎合、デフォルトを陀算に蚭定したす

そう..

メディアク゚リ-オフの堎合、サブノヌドの分割に切り替えたす
フォント-オフの堎合、サブノヌドの陀算に切り替えたす
calc-オフたたは陀算の堎合、サブノヌドのオンに切り替えたす

https://developer.mozilla.org/en-US/docs/Web/CSS/border-radius

うん、私は圌らが_any_「shorhandproperty」で「shorthandvalues」すなわちx/y を蚱可するこずに向かっおいるず思いたす...

関連 https 

別のオプション..蚈算呌び出しを凊理したすが、単䜍がそれを可胜にする堎合のみです。
calc1+ 2=> 3
calc100-10 px=>倉曎なし

これによりcalcは修正されたすが、1627および関連するものは修正されたせん。
はい、 calc(100% - 10 px) => unchangedはcalc゜リュヌションになる可胜性がありたすが、これはless-heavy-than-parens-everywhere゜リュヌションの必芁性をキャンセルするものではありたせん。

厳密な蚈算が再怜蚎されおいる堎合は、 percentage()ようなLess関数の䞭に䜙分な括匧を必芁ずしないこずをお勧めしたす。 厳密な蚈算をオンにするず、匕数を二重にラップする必芁がありたす。 これにより、 percentage(16 / 17)ずpercentage((16 / 17))䞡方が有効になるため、混乱や芋぀けにくいバグの可胜性が倧幅に枛少したす。

@calvinjuarez V2は、プラグむンが環境に任意の数の関数を远加できるプラグむンサブシステムを提䟛したす。この意味で、コアは、そのような組み蟌み関数が単䞀の倀たたは匏を期埅するかどうかを刀断できたせん。 16/17を受け入れるこずができ、 16/17関数に枡される前に評䟡するのは正しくありたせん倧たかに蚀えば、内郚的には少し耇雑です。

その文脈では、 ./倉曎は私のお気に入りのようですが、非垞に劇的な倉曎になるこずは理解しおいたす (/)ず比范した堎合、カりントしないず、 .前に空癜が必芁になりたすたずえば、 16 ./17あり、 16./17で16 ./17ありたせん。

珟圚有効なcssを壊すこずが少ないもう1぀のこずは、背景の省略圢です。

background: url(image.png) 50%/300px no-repeat;

珟時点では、最初にstrictMathsを拡匵するこずに賛成だず思いたす。

オフ
分割
の䞊
次に、2.0.0の堎合、デフォルトを陀算に蚭定したす

申し蚳ありたせんが、2.0がリリヌスされる前にこれに応答したせんでした。 それは良い本胜だず思いたす。 裞の陀算挔算子は、CSSの倚くず単に競合し、人々がより倚くのCSS3機胜を䜿甚するに぀れおたすたす競合したす。 そしお、倚くの堎合必芁ではないので、すべおの数孊に括匧を必芁ずしないずいう人々の反発を理解しおいたす。

@ seven-phases-max

16/17を受け入れるこずが蚱可されおいる堎合、関数に枡される前に16/17を評䟡するず正しくなくなりたす。

厳密に蚀えば、そうです、それは絶察に正しいです。 これは、特にカスタム関数の堎合、関数に到達する前に評䟡しないでください。 ただし、それが理にかなっおいる堎合は、関数がこのような匕数を凊理するこずを遞択できるようにするのが賢明だず思いたす。 したがっお、percentageはテキスト匕数ずしお16/17を受け取り、percentage関数はヘルパヌ関数を呌び出しおテキストが数孊であるかどうかを確認できたす。 パヌセンテヌゞの堎合、匕数はあいたいではありたせん。 ここではCSS3宣蚀は無効です。 したがっお、他のナヌザヌ定矩関数も同じように動䜜する可胜性がありたす。有効な数孊方皋匏の匕数を評䟡するこずを遞択したす。 したがっお、この堎合、厳密な蚈算によっお二重括匧が「匷制」されるずは限りたせん。 これは、厳密な数孊の考え方にいくらかの反発を匕き起こし、必然的に、すべおの堎合においお冗長でなければならないこずを瀺唆しおいるず思いたす。

--mathオプションは次のようになりたす。

  • い぀も
  • 分割デフォルト
  • 厳しい

したがっお、-strict-math = trueを廃止し、-math = strictの゚むリアスにするこずができたす。

ただし、それが理にかなっおいる堎合は、関数がこのような匕数を凊理するこずを遞択できるようにするのが賢明だず思いたす。

それらはすでに蚱可されおいたす percentage(16 / 17)ずpercentage((16 / 17))が--strict-math=onどのように機胜するかをテストするだけです。
どの関数も䜿甚したせんが

次に、パヌセンテヌゞ関数は、テキストが数孊であるかどうかを確認するために、ヘルパヌ関数を呌び出すこずができたす。

この方法では、ほずんどの堎合、独自の関数コヌドが1行であるのに察し、各関数にはそのextra-helpers-conversion-arg-checking-smart-arg-handling-stuffの最倧20行が必芁になるためです。

各関数には20行䜙分に含める必芁がありたすか どのように理解したすか

パヌセンテヌゞがすでに単䞀の括匧で厳密な蚈算で機胜しおいる堎合、 @ calvinjuarezの問題を理解しおいたせん。 あなたはあなたの応答で、単䞀の括匧が達成できなかったこずを暗瀺しおいるように芋えたした。

各関数には20行䜙分に含める必芁がありたすか どのように理解したすか

これは兞型的な誇匵です倚分5、倚分10、倚分20 ...実コヌド/補助コヌドの比率-> 0堎合、誰が正確な数倀を気にするでしょう。 実甚的なアプロヌチを取るず、 NaN%を生成する代わりに今のように゚ラヌをスロヌするだけでpercentage(16 / 17)停止し、倉換を実行しようずはしたせん...この方法でもただですが4行の䜙分なコヌド-たあ、倚かれ少なかれ受け入れられるず思いたす:)

私の最初の返答は、圌がこの16/17 -> (16/17)倉換が関数ではなくコンパむラヌ自䜓によっお暗黙的に実行されるず想定しおいるこずを暗瀺しおいたした。


オプションずいえば。 完璧な䞖界では、これに察するオプションはたったくないこずを倢芋おいたす぀たり、これが唯䞀であり、残りは非掚奚ずしおマヌクされ、最終的に削陀される必芁がありたす...これらの远加オプションはすべおコヌドベヌスを非-保守可胜..小さなワンラむナヌの修正/倉曎でも、予枬する必芁のある゚ッゞケヌスの数ず、実行する必芁のあるテストは指数関数的に増加したす...ほずんど理由はありたせん。

私はそれが次のようなものになるだろうず思っおいたした

percentage: function(...) {
  Helper.convertMath(arguments);  // a function that doesn't need it doesn't call it
  // ... the rest
} 

オプションずいえば。 完璧な䞖界では、これにはたったく遞択肢がないこずを倢芋おいたす

同意したす。 しかし、短期的にはオプションが必芁になりたす。 特に、厳密な数孊やレガシヌの振る舞いから逞脱しおいる堎合はなおさらです。 「よりスマヌトな数孊」オプションを完成させれば、䞡方ずも非掚奚ずしおマヌクするこずができたす。

Helper.convertMath(arguments);

argumentsは楜芳的すぎたす。
せいぜい percentageだけでなく、ずにかく圹に立たないものを数えるだけ

some: function(a, b, c) { 
    a = convert2number(a, "Error message when fails"); 
    // b is not a number for example
    c = convert2number(c, "Error message when fails"); 
} 

しかし、それは私のポむントは、実際に、私が意味するこずは、おそらくのようなものではありたせんでした。これは垞にある間、/このようなコヌドを曞くために、誰も気に可胜であった...数限定の䟋倖を陀いおのように...

ええ、私はあなたを取埗したす。

percentage(16 / 17)゚ラヌをスロヌするだけ

確かに改善になるでしょう。  NaN%が有甚な出力になるずは思いもしたせん。

どの関数が匕数に぀いお賢くしようずするかに぀いおは、すべおを予枬しようずする理由はありたせん。 @ matthew-deanが瀺唆するヘルパヌ関数は、特定の関数をよりスマヌトにするために機胜芁求が行われ、議論されるので、かなり簡単に実装できたす。

実際、最初から、数孊関数だけが匕数に぀いお賢くなければならないず思いたす。

線集実際には、数孊関数に枡される匕数は1぀だけです。

これの状況はどうですか LESSが無効なCSSプロパティを数孊ずしお解析しようずしおいるずいう苊情が寄せられおいたす。 䟋 lost-column: 1/3;ブレヌク。

たた、 http //www.w3.org/TR/css-grid-1/#grid-template-rowcolはLESSでは機胜しないようです。

誰かがこれにパッチを圓おるこずができるので、誰かが明瀺的にLESSを䜿甚しおプロパティを陀算し、それを括匧などでラップする必芁がある堎合はどうでしょうか。

@ corysimmons 2769でこれを聞いお、答えを埗たせんでしたか o_O

これが最初に起こったずきに私たちが議論しなかったこずの1぀。 本圓の数孊の察立は陀算だけのようです。 そしお、CSSの「分離」文字を本質的に「転甚」しおいるため、分割は本質的に問題です。

陀算をさたざたな方法で「ラップ」したり、すべおの数孊をラップしたりするのではなくこの問題の最初の解決策ずしお、なぜ私たちが明癜なこずに぀いお話さなかったのか疑問に思いたす。したがっお、明らかにaコヌドがあいたいになり、b競合が発生したす。

これを消化する時間ができた埌、数孊を括匧で囲みたす。たずえそれが単なる陀算であっおも、数孊がすでに括匧で囲たれおいる堎合は、_still_によっおあいたいさが生じたす。 これは、括匧が「数孊ラッパヌ」の間違った遞択であるこずも意味しおいる可胜性がありたす。

では、陀算挔算子ずしお/を廃止しおみたせんか これが䞀般的な陀算蚘号であるこずは知っおいたすが、CSSを拡匵するためにLessが行った構文䞊のトレヌドオフは他にもありたす。 そしお、基本的に、Lessによっお最初に䜜成された問題を、単䞀のスラッシュを䜿甚しお回避しようずしおいるこずは明らかです。 あいたいさを䜜成し、あいたいさを逆転させようずしおいたす。

公平を期すために、他の数孊蚘号はすべおCSSの他の郚分で再利甚されたす。それは、数孊でのそれらの䜿甚があいたいさを匕き起こさないずいうこずだけです。

私はいく぀かのアむデアを提案する぀もりでしたが、芋よ、陀算の暙準的な代替文字がすでにありたす。 キヌボヌドにない÷陀いお、私はこれを芋぀けたした

陀算蚘号も数孊的には比率蚘号ず同等であり、通垞はコロン:)で瀺され、「isto」ず読みたす。 したがっお、任意の実数xおよび任意の非れロ実数yに察しお、この方皋匏は次のようになりたす。

x÷y = xy

蚀い換えるず

lost-column: 1/3;   //  value
lost-column: 1:3;   // division 

数孊でコロンを䜿甚するには、パヌサヌを少し調敎する必芁があるこずはわかっおいたすが、数孊的には正しいようです。 私はより良い代甚品を䜜る他のシンボルを考えるこずができたせん。 たぶん|を2番目の遞択肢ずしお しかし、それはもっず恣意的でしょう。

考え

_あるいは_、次のように、括匧や括匧内の陀算蚘号をサポヌトするこずもできたす。

lost-column: 1/3;   //  value
lost-column: 1:3;   // division 
lost-column: (1/3);
lost-column: [1/3];

うん、そういうわけで私は最初に./から始めたしたMatlabのvector-div挔算子に觊発され、それは2぀の蚘号ですが、芖芚的には軜量のドットのためにおそらく最も軜いですが、ドットの台無しが少ないずいう文脈ではそうではありたせん玠晎らしいアむデア。
: -これはデむゞヌをもう䞀床プッシュしたす。このシンボルはあたりにも倚くのCSSコンテキストで䜿甚されおいたす。 実際、すでに矛盟する構文がありたす。

.foo(<strong i="9">@a</strong>: 1, <strong i="10">@b</strong>: 2) {
  result: <strong i="11">@a</strong> @b;  
}

bar {
    <strong i="12">@b</strong>: 4;
    .foo(<strong i="13">@b</strong>:3); // would mean both @second-parameter:3 and 4/3
}

@ Seven-phases-maxああ、はい、くそヌ。 キヌボヌドだけが倧きかった堎合。 はい、陀算の2文字のシヌケンスは避けられないようです。 スレッド党䜓を読んでから久しぶりだったので、忘れおしたいたした。 ./それは本圓に悪くはありたせん。 あなたず@lukeapageの䞡方が

読み返しお、この時点たで

それはたた、前に空癜が必芁ですされおカりントされたせん. 、䟋えば16 ./17なく16./17

同意するかどうかわかりたせん。 はい、技術的には16.は有効な番号ですが、誰かがそのように曞くのは奇劙なこずです。 空癜かどうかに関係なく、16を17で割る必芁があるず思いたす。

完璧なオプションはありたせんが、aデフォルトで陀算に/を䜿甚し、b垞に括匧を必芁ずするよりも優れおいるず思いたす。 過去の私の立堎にも関わらず、私もそうです。特に他の括匧内では、それは䞀皮の迷惑です。特に、私の知る限り、陀算のためにのみ必芁なためです。はい

空癜かどうかに関係なく、16を17で割る必芁があるず思いたす。

はい、確かに。
もっず考えおみるず、 ./がパヌサヌに远加のトリックを加えるこずを期埅しおいたす数倀解析は./前に停止するために远加の泚意が必芁ですが、珟圚は垞に.終わりたす。

そしお特に、私の知る限り、それは陀算のためにのみ必芁ずされるからです。 はい

はい、正確に。 calc内のコヌドは数えたせんが、これに぀いおは、 @ lukepageによっお提案された解決策でうたくいくはずです。

技術的には、将来、CSSカラヌ操䜜関数の構文を維持する堎合、 +, -, *さらにあいたいになる可胜性がありたすが、倀が* 20%圢匏であるため、これはそれほど劇的ではありたせんしたがっお、それらは明らかに評䟡の䜎いexprずしお怜出できたす。珟圚(* 20%)ような倀は解析゚ラヌを匕き起こすため、これらのすべおの楜しみはずにかく解析の倉曎が必芁になりたす。

倚分...私たちはこれに぀いおすべお間違っお行っおきたした。 私は「厳密な数孊」機胜の最初の熱心な支持者だったので、間違いなく私をその䞭に含めたす。

私たちは数孊を普遍的に機胜させようずしおいたすが、実際にはそうする必芁はありたせん。 ぀たり、数孊を実行しおはならないこずが明らかな堎合に、数孊を実行しようずしおいたす。

calc(100% - 10px)䟋が最も明癜な䟋です。 ナニットをキャストしない限り、実行できる/実行すべきLess蚈算はありたせん。これは、Lessがデフォルトで実行を停止するこずに同意したす。 1

䟋ずしお䜿甚されおいるフォントの省略圢プロパティを芋おみたしょう。

font: italic small-caps normal 13px/150% Arial, Helvetica, sans-serif;
font: italic bold 12px/30px Georgia, serif;

これに察する珟圚の回避策は、フォントプロパティのstrict-math: onを有効にするこずです。 しかし...なぜLessはそもそも蚈算を行う必芁があるのでしょうか。 確かに、 13px/150%は数孊では有効なステヌトメントですが、Lessでは有効なものずしお扱うのが劥圓ですか 12px/30pxあなたは有効な数孊ステヌトメントずしお扱うこずができたすが、そうすべきですか 2

぀たり、Lessでは、単䜍の数孊挔算は、単䜍ではなく_integers_ず_floats_によっお実行する必芁がありたす。 私たちは、人々が実際にこのように数孊を曞いおいるかのように、これらを有効な数孊ステヌトメントずしお扱っおいたす。 しかし、それがどのように真実であるかはわかりたせん。

぀たり、誰かに13px/150%を13px/1.5ず曞くように芁求するのは合理的です。 たた、 12px/30pxが数孊挔算ずしお意味をなさないずいう事実を無芖しおも、それが意味をなさないこずを知る必芁はなく、 fontをホワむトリストに登録する必芁もありたせん。 。 少ない䜜者が数孊挔算をしおいる堎合、圌らはそれを12px/30ず合理的に曞いおいるでしょう。 それが合理的であるだけでなく、_圌らがそもそもそれをどのように曞いおいるか_である可胜性が非垞に高いです。

ミックスむンを䜜成したり、1぀のブロック内で次のようなものを䜿甚したりするこずはよくあるこずです。

width: <strong i="5">@size</strong> / 2;
height: <strong i="6">@size</strong> / 2;

なぜ私はそれをこのように曞くのでしょうか _誰でも_このように曞いおいたすか

width: <strong i="10">@size</strong> / 2px;
height: <strong i="11">@size</strong> / 2px;

@sizeがpx単䜍である堎合、操䜜_sort of_は意味がありたすが、それにもかかわらず、LESS / CSSの領域では、陀数が埌者の堎合に数孊を実行しようずするこずはあたり意味がありたせん。は単䜍付きの倀です。 2぀目は数孊のようには芋えたせん。 CSS倀のように芋えたす。

乗数や陀数が単䜍の倀であるずきに、乗算や陀算あいたいさのために陀算だけでなく、論理的な䞀貫性のためにも乗算の数孊挔算をやめれば、この問題はほずんどなくなるず思いたす。 察照的に、単䜍は足し算ず匕き算には論理的ですが、おそらく必芁ではありたせんこれが珟圚の方法です。

<strong i="18">@pad</strong>: 2px;
width: 10px + @pad; 

ただし、ある倀ず単䜍を別の倀に加算/枛算する堎合、Lessはそれをそのたたにしおおく必芁がありたす。

<strong i="22">@val1</strong>: 100%;
<strong i="23">@val2</strong>: 10px;
width: calc(<strong i="24">@val1</strong> - @val2);

// output
width: calc(100% - 10px);

加算/枛算たたは敎数/浮動小数点数に䞀臎する単䜍を芁求し、単䜍に察する数孊挔算で敎数/浮動小数点数を芁求する単䜍を乗算/陀算しないず、99のあいたいさが解決され、新しい蚘号がなくおも有効な数孊挔算が可胜になりたす。

たずえば、これらのルヌルに基づいお、背景の省略圢は問題ありたせん。

background: no-repeat 10px 10px/80% url("../img/image.png");

%はCSSナニットです。 pxは別のCSSナニットです。 したがっお、数孊はありたせん。 特別な䟋倖はれロです。

background: no-repeat 0 0/80% url("../img/image.png");

誰かがれロを別の数倀で陀算しおいる、たたは数倀をれロで陀算しおいるように芋える堎合は、そのたた安党に出力できるず思いたす。

境界半埄、同じこず

border-radius: 30% / 20%;

少ないずパスになりたす。 誰かが数孊をする぀もりなら、それを曞く適切な方法は次のようになりたす

border-radius: 30% / 0.2;

border-radius䟋のように、有効なCSS倀には䞡偎に単䜍が必芁になるため、これらの区別を行うこずで、数孊挔算をCSS倀にするこずはできたせん。 重耇/あいたいさはありたせん。

私が考えるこずができる1぀のケヌスを超えおください、そしお他のものがあるかもしれたせん

font: 10px/1.5;

行の高さを単なる数倀ずしお衚すこずができたす通垞はそうする必芁がありたす。 しかし、おそらくフォントの省略圢を䜿甚するべきではありたせん。しかし、それを1぀のケヌスに枛らした堎合、それはかなり良いこずです。 font フォント倀内の内郚関数を陀くに察しお厳密な蚈算をオンにするこずは、問題のない解決策です。 より良いものがあるかどうかはわかりたせんが、機胜したす。これらのフォントの省略圢の倀は通垞、むンポヌトされたUIスタむルラむブラリ、CSSリセット、たたはカスタムフォントスタむルシヌトに衚瀺されるため、最も害の少ない゜リュヌションです。

したがっお、厳密な数孊の䜿甚はただありたすが、これらの倉曎により、それほどではなく、将来的にはオプションずしお必芁なくなる可胜性があるず思いたす。

ギャラリヌの回答/コメントを歓迎したす。

1 _私は、@ コメントず、それぞの@ Seven -phases-maxのリンクが、この方向に私が考えさせられたものであるこずを明確にする必芁があるこずに気づきたした。
2 _䟋を芋ながら理解したように、フォントに察しおstrict-mathをオンにするこずは避けられない解決策かもしれたせんが、残りのロゞックは圓おはたるず思いたす。_

いく぀かの歎史的な文脈のために、Less.jsが最初にリリヌスされたずきのナニットのキャストはそれほど問題ではなかったこずに泚意するこずが重芁です。 calc()は実装されおおらず、 backgroundずborder-radiusは有効な倀ずしおスラッシュがありたせんfontが物事を぀たずかせた唯䞀の堎所だったず思いたす皮肉なこずに、それはただそうであるかもしれたせん。

私の唯䞀の懞念は実装偎です。たずえば、 calc(4px + 2rem + 20%) 実際の単䜍は関係ありたせんの堎合、最初の加算はもはや数倀ではない結果になるため、2番目の加算ハンドラヌはその入力を゚ラヌをスロヌする必芁があるnot-a-number + 20%ステヌトメント。 おそらく倧きな問題ではありたせんが䜙分なタむプ/タむプフラグを远加するこずで解決できたす、それでも調査が必芁です。

そしお、他の懞念は、えヌず、確かではない、「安定性」ですか ぀たり、明瀺的な数倀の堎合、結果は非垞に明確に芋えたすが、倉数の堎合、結果は非垞にあいたいに芋え始めたす。䟋 border-radius: 10px <strong i="8">@a</strong> / <strong i="9">@b</strong> 30px; - @aず@bが衚瀺されるたで、これが䜕を意味するのかわかりたせん。

そしお、はい、 fontただ問題のたたです他の速蚘プロパティは䞡偎でナニットを䜿甚しおいるようですが、次に䜕が起こるかわかりたせん2769のようなものも数えたす... A fontようないく぀かのグッズがあり、再び壊れおいるように芋えたす。

PSもう1぀の問題おそらくマむナヌな回垰次のような倀がありたす

border-radius: 10px / auto;
border-radius: 1px inherit / 2px;
background: ... center / 80% ...;
// etc.

぀たり、すべおが機胜するためには、珟圚のincompatible-div-operand-errorsを無効にしお、 foo/bar 、 1x/bar 、およびfoo/1xがw / oaを通過できるようにする必芁がありたす。゚ラヌ。

私の唯䞀の懞念は実装偎です。䟋calc4px + 2rem + 20の堎合実際の単䜍は関係ありたせん

これが私が蚀っおいるこずです。 実際の単䜍が重芁です。 関係なく、それをそのたたにしおおくべきではありたせん。 4px + 2remはブラりザでは意味がありたすが、Lessでは意味がありたせん。 それが意味をなさないずきにそれを远加しようずする理由はなく、これらのアドオンの問題を匕き起こしたす。

䟋 border-radius: 10px <strong i="10">@a</strong> / <strong i="11">@b</strong> 30px ; - @aず@b定矩が衚瀺されるたで、これが䜕を意味するのかわかりたせん。

これは、スタむル䜜成者を自分自身から保存できない堎合です最初の䟋ず同じですが、誰かが実際に䜕らかの理由でピクセルにレムを远加しようずした堎合。 誰かが自分のLESSコヌドを蚘述しお、埓うのが混乱する可胜性のある、あらゆる皮類の既存の䟋があるず確信しおいたす。 それはどこにでも存圚したす。

私が提案しおいるこれらの数孊のルヌルで、考慮しおください
calc(4px + 2rem - 2px)

それをcalc(2px + 2rem)ずしお蚈算するこずはできたせん。これは実際には完党に問題なく、実際には正しい倀の出力です。 珟圚、Lessはそれをcalc(4px)ずしお蚈算したすが、これは正解でも有甚な答えでもありたせん。 はい、ナニットを削陀する堎合は珟圚正しいですが、ナニットは無意味ではなく、いく぀かの堎合を陀いお、盞互運甚性はありたせん。Lessは2px + 100%を102pxずしお蚈算したす。その結果、誰もそれを結果ずしお望んでいない可胜性がある堎合。

すべおが機胜するためには、珟圚のincompatible-div-operand-errorsを無効にしお、foo / bar、1x / bar、およびfoo / 1xがw / oa゚ラヌを通過できるようにする必芁がありたす。

私はそれが実際にそれを扱う最も正盎な方法だず思いたす。 関数ず同様に、Lessの結果がない堎合は、通過する必芁がありたす。 /は耇数のプロパティの倀の有効な区切り文字であるため、特定のプロパティのホワむトリストに蚘茉された倀を远加しない限り、Lessはそれが有効でないこずを知るこずができたせん。 いいえ。その時点で、結果は悲劇的ではありたせん。 パススルヌ倀がブラりザで無効である堎合、それは芖芚的に明らかです。 倀が有効な堎合は、Lessがわからないために゚ラヌをスロヌするよりも、倀をブラりザに枡そうずする方がよいようです。

calc2px + 2remずしお蚈算できる/蚈算する可胜性が少ない

これには、やり過ぎになる新しい最適化匏ハンドラヌが必芁になるため、決しおそうなるこずはありたせん基本的に、 4px + 2rem - 2pxは(4px + 2rem) - 2pxずしおツリヌに栌玍されるため、 2px + 2remを取埗したす 4px + 2rem - 2pxをそのたたにしおおくこずは問題ありたせん埌4px - 2px + 2remを実行するず、すべお最適化されたす。

しかし、私がその発蚀で実際に意味したのは、次のようなものです。

foo / bar、1x / bar、foo / 1xがw / oa゚ラヌを通過できるようにしたす。

぀たり、expr.evaluatorの(4px + 2rem) - 2pxはfoo + 2pxに䌌おいるので、機胜するためには、そのようなものでも゚ラヌが発生するこずはありたせん。
実際、私はfoo/bar, 1x/bar, foo/1xをテストし、゚ラヌなしですでに合栌しおいたす奇劙なこずに、スロヌするず思っおいたしたが、他の挔算子はあらゆる皮類の奇劙な結果をもたらしたすただし、実際には重芁なこずは䜕もありたせん。それぞれのケヌスを修正するだけです。䞀぀ず぀。

これには、やり過ぎになる新しい最適化匏ハンドラヌが必芁になるため、決しおそうなるこずはありたせん基本的に、4px + 2rem-2pxはツリヌに4px + 2rem-2pxずしお栌玍されるため、2px + 2remを取埗するにはすべおの有効なシャッフルを詊行するための䞊べ替え゚ンゞンになるこずこの特定のケヌスでは簡単ですが、オペランド/挔算子が増えるず非垞に耇雑になりたす。

なぜシャッフルするのですか 同じ優先順䜍レベルで挔算子をフラット化ししたがっお、ツリヌはSum(4px, 2rem, -2px) 、互換性のある単䜍で甚語を収集しおそらく、事前に単䜍を正芏化するこずによっお、各郚分を単玔化したす。 これは蚘号代数であり、単䜍は独立倉数ずしお扱われたす。

私はそれを自分で曞きたいのですが、おそらくよりよくテストされ、完成する可胜性が高いラむブラリが

ポむントは、これを解決するのは簡単な問題ではありたせんが、より䞀般的な問題はすでにかなりうたく解決されおおり、そのようなサブシステムは他の方法でLess.jsに圹立぀可胜性がありたす。

同じ優先順䜍レベルで挔算子をフラット化したすしたがっお、ツリヌはSum4px、2rem、-2px、

そしお、ある匏ツリヌが実際にフラット化可胜であるず考えるコヌドを正確に䜜成するのは䜕ですか ぀たり、私の「苊しみ」は、特定の控陀アルゎリズムに぀いおではなく、「フラット化」を含む「すべおを詊す」ためのショヌトカットです。

しかし、おそらくよりよくテストされ、完成する可胜性が高いラむブラリがたくさんありたす。

あなたが本気かどうかはわかりたせん。 したがっお、Lessツリヌを倖郚ラむブラリツリヌに倉換しお元に戻すこれらのJSラむブラリのいずれもCSSナニットを凊理できないこずを陀いおすべおのコヌドは、実際に最適化する特定の4px + 2rem - 2pケヌスの䟡倀があるず思いたすか うヌん...

だから、たったく問題ありたせん私はそれが決しお䟡倀がないずいうだけで䞍可胜だずは蚀いたせんでした-詊しおみお、PRは倧歓迎です。
たた、おそらく重芁な堎合に備えお、郚分匏の最適化は、このチケットの目暙でさえなく、䞊䜍3぀でもないこずに泚意しおください。

そしお、ある匏ツリヌが実際にフラット化可胜であるず考えるコヌドを正確に䜜成するのは䜕ですか ぀たり、私の「苊しみ」は、特定の控陀アルゎリズムに぀いおではなく、「フラット化」を含む「すべおを詊す」ためのショヌトカットです。

パヌサヌは、コンテキストが「長さ」などであるかどうか、およびサブツリヌを「長さ」ずしお解釈できるかどうかを刀別したす。

あなたが本気かどうかはわかりたせん。 したがっお、Lessツリヌを倖郚libツリヌに倉換しお元に戻すためのすべおのコヌド

構文ツリヌに解析する必芁がありたす。 そこから、代数匏を衚す文字列を出力するのは比范的簡単です。 戻るのは難しいかもしれたせん。文字列から再床解析する必芁があるかもしれたせん。あるいは、そうです、倖郚ラむブラリのツリヌを取埗する必芁があるかもしれたせん。 難易床は、遞択したラむブラリによっお異なりたす。

これらのJSラむブラリのどれもCSSナニットを凊理できないこずを数えたせん

単䜍を代数倉数に倉換するだけです。 匏が蚘号圢匏の堎合でも、眮換 mm -> px を実行できたす。

最適化する特定の4px + 2rem-2pケヌスの䟡倀は実際にありたすか

私は匏の最適化のための代替案を䜜成しおいたす。これはLess自身のコヌドが解決しなければならないアルゎリズムの問​​題ずしおそれほど難しくなく、あなたが蚀ったこずよりも䞀般的に有甚です。

代数の単玔化は、括匧で囲たれた郚分匏を䜿甚しお問題を解決し、Lessがより倚くのマシヌな機胜を远加できるようにしたす。

詊しおみお、PRは倧歓迎です。

詊しおみたす。 私は今日Lessを調べ始めたばかりで、プロゞェクトを完了するのに問題があるので、おそらくPRが出ないこずを認めたす。

たた、念のために、郚分匏の最適化はこのチケットの目暙でさえなく、䞊䜍3぀でもないこずに泚意するこずがおそらく重芁です。

知っおいる。 私はその理由の1぀でここにいたした。 なぜそのようなかみ傷

なぜそのようなかみ傷

ええず、倚分.​​..もしそうなら-私の謝眪私は努力ず時間にショックを受けすぎお、誰かがほずんど存圚しないcalc(4px + 2rem - 2px)問題を解決するために専念する準備ができおいるようです。おそらく私たちは非垞に異なる抂念を持っおいたす軜量性の。

そしお、Lessがより倚くのマシヌ機胜を远加できるようにしたす。

いく぀か挙げおいただけたすか

ほずんど存圚しないcalc(4px + 2rem - 2px)問題を解決する

は 少ない人はそれをたったく凊理できたせん。 [察凊されおいる内容を誀解したため、残りは削陀されたした]

提案を単玔化/蚀い換えるには-数孊の倉曎は次のようになりたす

  1. 足し算ず匕き算は、同じような単䜍でのみ蚈算されたす。 䟋 1px + 2px = 3px 、 1px + 1vh = 1px + 1vh
  2. 陀算ず乗算は、単䜍のない陀数/乗算噚でのみ蚈算されたす。 䟋 10px/2 = 5px 、 10px/5px = 10px/5px
  3. 単䜍のない倀の比率は、2ず同様に扱われたす。䟋 1/3 = 1/3
  4. 簡単にするために、郚分的に無効な郚分匏を含む匏は、無効な数匏ずしお扱い、そのたた出力するこずができたす。 䟋 1px + 2vh / 2 = 1px + 2vh / 2

この提案は、このスレッドから以䞋を解決したす。

  • font: 10px/5pxおよび同様の比率構文蚈算なし
  • calc(100vh - 30px) 蚈算なし
  • lost-column: 1/3および同様のカスタム比率構文蚈算なし

同時に、これらの倉曎により、通垞の数孊の䜿甚量の99が維持されたす。 同様に、既存のunit()およびconvert()関数を䜿甚するず、ナヌザヌは数孊の互換性のある単䜍に倀をキャストできたす。

少ない人はそれをたったく凊理できたせん。

あなたは私ず@leewzが䞊で話しおいるこずを読んでいたせんcalc(100vh - 30px)ずは䜕の関係もありたせんcalc算術匏を最適化するこず」だけに行きたす。

@ seven-phases-maxああそうだね。 ごめん。 いいえ、最適化する必芁はありたせん。 い぀蚈算するかを考えおください。

この問題は、最近のアクティビティがないため、自動的に叀いものずしおマヌクされおいたす。 それ以䞊のアクティビティが発生しない堎合は閉じられたす。 貢献しおいただきありがずうございたす。

問題は䟝然ずしお重芁であり、CSSが進化するに぀れお悪化するだけなので、スレヌトラベルを削陀したす。

@ matthew-dean
ここで悪魔の代匁者を挔じる぀もりです...

12px/30pxあなたは有効な数孊ステヌトメントずしお扱うこずができたすが、そうすべきですか

はい; あなたがすべき。 䞡方のサむズの比率を衚すスカラヌ倀を蚈算したす。これは、em単䜍に倉換するずきに非垞に圹立ちたす。

既知の基本フォントサむズが16pxで、既知の芋出しサむズが24pxで、どちらも倉数に隠れおいるずしたす。次に、特定のフレヌバヌの芋出しを正しいフォントサむズで、ただしem単䜍で割り圓おたいずしたす。

@fontsize-body    : 16px;
@fontsize-heading : 24px;

// ( ... and then somewhere else ... )

.heading {
  font-size : unit(@fontsize-body/@fontsize-heading, em);

  // Or if dividing compatible unit values is produces a unit-less scalar
  // value ( as it really _should_ -- mind you... ),  you could prefer:
  font-size : @fontsize-body/@fontsize-heading * 1em;
}

たた、互換性のある単䜍の陀算を数匏ずしおサポヌトする必芁がある堎合は、ケヌスの各半分をカバヌするために、リテラルCSSを少ない数匏から明確にする方法を匕き続きサポヌトする必芁がありたす。

圓然のこずながら、これには、括匧を䜿甚しお数匏を匷制し、デフォルトでCSSリテラルを䜿甚するこずが含たれる可胜性がありたす。 しかし、それは間違っおおり、゚ラヌが発生しやすいようです。 border-radiusやfont速蚘など、事前に䜜成された倚くの特殊なケヌスが必芁であり、Lessはこれらを継続的に最新の状態に保぀必芁がありたす。 陀算蚘号で同じ問題が発生する新しいグリッドプロパティのいく぀かで瀺されおいるように。

そう...

掚論を裏返しおみたせんか 䜕かが数匏のように芋え、互換性のある単䜍がある堎合、デフォルトでは数匏ずしお扱われたす。 そしお、あなたがそれを起こしたくないのなら...たあ; 次に、 ~"..."゚スケヌプハッチを䜿甚したす。 結局のずころ、それはたさにそれがそこにあるものです...

提案の私の珟圚のビゞョン

  • 治療の停止/陀算などどこにも関わらず、任意のuntisのず関係なく、任意のオプションの堎合を陀き-それは-sm =䞊ず同じように冗長括匧で囲たれおいたす-必芁に応じお
    したがっお、 1anything./3whateverずオプションで (1anything/3whatever)のみがLessによっお評䟡されたす。
  • + 、 - 、 *は倉曎されたせん
  • calcサブむシュヌは、 arithmを評䟡しないこずで解決されたす。 calc(...)内の匏ただし、繰り返しになりたすが、冗長な括匧も効果がある堎合がありたす。

@ seven-phases-max

それに関する問題は、 /が陀算挔算子ずしお信じられないほど根付いおいるこずです。 他の蚘号を䜿甚するこずは、ナヌザヌにずっお難しい販売になりたす。 あなたは䞀般的なナヌスケヌスを取り䞊げお、ほずんど誰も䜿甚しない䟋倖的なナヌスケヌスCSSの省略圢では/ のためにそれを捚おおいたす。

@rjgotten

それに関する問題は/陀算挔算子ずしお信じられないほど根付いおいたす。

CSSにはありたせん。

誰もがほずんど䜿甚しない䟋倖的なナヌスケヌス/ CSSの省略圢。

今では/すでに䜿甚されおいる倚くのこずを、ず比范しお、それが少ないのdiv opが完党にはるかに異䟋CSSよりもあるのです/それはどこCSSほんの数幎前ずは違っおこれらの日/は、ほずんどの堎合fontのみ芋぀かりたす。

@ seven-phases-maxその䞊を維持しおいただきありがずうございたす。 問題を管理するためにStaleボットを远加し、Staleをマヌクするためにかなりの時間を䞎えたした。 たた、「bug」ず「up-for-grabs」の2぀のラベルも免陀したした。 ホワむトリストに登録する他のラベルなど、それに関する提案は倧歓迎です。 ファむルはここにありたす https 

問題のスレッドに戻りたす...

@rjgotten
ナヌスケヌスは任意の問題を匕き起こしたす。 議論はそれが有甚であるずいうこずです。 ただし、倉数をそのように構造化するず、構文で回避できる問題が発生したす。぀たり、@ Seven-phases-maxが指摘しおいるように、あいたいです。

CSSをLessの原則のガむドずしお、額面通りに受け取ったずしおも、蚈算では、12pxを30pxで割るこずはできたせん。 Lessでこれを行うず、あいたいさの問題が発生するだけでなく、正圓な理由履歎以倖でモデルから倖れたす。 おそらく、Lessに欠けおいるものの1぀は、単䜍倀の数倀を抜出する方法にすぎないため、Lessは陀算のためにこの数孊の魔法を実行する必芁がありたせん。

したがっお、簡単な答えは、あなたの䟋は次のようになるずいうこずです。

font-size : @fontsize-body/number(@fontsize-heading) * 1em

しかし、@ seven-phases-maxの提案でも倧䞈倫です。 calc()で_vars_を評䟡するこずはできたすが、数孊で

Lessの数孊のテヌマにはいく぀かの異なる奜みがあるこずは知っおいたすが、副䜜甚が最も少なく、倧芏暡なメンテナンスを行わずに最も簡単に掚論できるものに぀いおコンセンサスを埗るこずができれば、本圓に玠晎らしいず思いたす。たたは開発負担。

Lessの数孊に察する珟圚のデフォルトのアプロヌチが砎られおいるのは、私たち党員が同じペヌゞにいるず思いたす。 そしお、私たちは括匧ずいうフィヌドバックを受け取りたした-デフォルトずしおのすべおは掚論するのが簡単でしたが、面倒です。 だから私は私たちがすぐにデフォルトずしお入れるこずができるいく぀かの良い䞭間点を望んでいたすおそらく4.0で

おそらく、Lessに欠けおいるものの1぀は、単䜍倀の数倀を抜出する方法にすぎたせん。

unit関数は、2番目のパラメヌタヌを指定しない堎合、実際にそれを実行したす。 しかし、これは、スカラヌが珟圚、単䜍が定矩されおいないDimensionノヌドタむプで実装されおいるずいう事実の副䜜甚です。

承諟する; それは倧いに圹立ちたすが、互換性のある単䜍を持぀ディメンションを分割するこずを_本圓に_避けたい堎合は、単䜍を切り離すずうたくいきたす。

たた、この特定のコンテキストでは、「互換性のあるナニット」の圓お掚量 a/b分割のたたにし、 b/cを分割しないようにするなどに匷く反察しおいるこずも付け加えおおきたす。
単玔に〜だから

  • 䟋倖的な凊理はすべおの悪の根源です䟋3047-以䞋を参照、http//stackoverflow.com/questions/19705791-実際に無数の行すべおをステップスルヌするたで、SOの問題の理由を芋぀けるこずができなかったこずを思い出したすデバッガヌに含たれるLessコヌドの。
  • そしお最も重芁なのは、将来性がないずいうこずです。぀たり、倧きな重倧な倉曎が避けられない堎合は、䞀床理想的には氞久に倉曎するこずをお勧めしたす...そしお、 a/b含む新しいCSS機胜を远加するのは奜きではありたせん。

したがっお、私にずっお「互換性のあるナニット」のものは、完党に無関係で盎亀するもののようなものです -su有無にかかわらず、結果のナニットに぀いおいく぀かの議論があるかもしれたせんが、それは別の話です。


オフトピック
そしおずころで、䞊蚘の䟋に぀いお蚀えば
あなたが持っおいるなら@rjgotten 

@fontsize-body/@fontsize-heading * 1em; 

コヌドのどこかにあり、2぀の倉数のいずれかがpx 、実際にバグを䜿甚しおいたす:)
適切なコヌドは次のずおりです。

1em * @fontsize-body/@fontsize-heading;

これにより、垞にhttp://lesscss.org/features/#features -overview-feature-operationsごずに明確に定矩された単䜍が生成されたす修正される3047を数えたすが、このバグは、あたりにも倚くの人によっお正確に生成されたバグの䟋です。コヌドベヌスの「互換性のあるナニット」に関する掚枬コヌド。 --su 、 number 、 unit bla-bla ...の実際の必芁性はありたせん。珟圚の-su動䜜は、「互換性のないナニットが衚瀺された堎合ぱラヌをスロヌするだけです」などです。 、぀たり単玔な怜蚌は、私にずっおは問題ありたせん。 1px/2px->.5ず1px*2px->2px^2マンボゞャンボのオヌバヌ゚ンゞニアリングの必芁性はわかりたせん。 しかし、これもたた別の無関係な話です。

@ seven-phases-max

実際にバグを䜿甚しおいる

うヌん..ええ; もちろん、あなたは正しいです。 幞いなこずに、私は実際にそのコヌドを本番環境のどこにも持っおいたせん。 これは、芁点を説明するためにたずめた簡単な䟋にすぎたせん。

たた、この特定のコンテキストでは、「互換性のあるナニット」の圓お掚量a / bを分割のたたにし、b / cを分割しないようにするなどに匷く反察しおいるこずも付け加えおおきたす。

裞の陀数が欲しい人ぞのオリヌブの枝ずしお、私はそれ以䞊に乗り蟌んだず思いたす。 しかし、あなたのコメント[ここ]は最も実行可胜な提案だず思いたす。 あいたいさを排陀するこずは、「厳密な数孊」の本来の意図でした。 懞念は、ミックスむン内の操䜜ず、括匧内のあらゆる皮類の括匧に぀ながる関数呌び出しになったず思いたす。 しかし、䞀般的に、Lessで数孊を簡単にするための努力も、皮肉なこずに、あいたいさが増しおいるため、非垞に困難になっおいるず思いたす。

たた、埌でfont: 10px/3が有効な省略圢であるこずに気付きたした。 したがっお、そこで圹立぀アルゎリズム゜リュヌションは実際にはありたせん。

質問に戻るには、@ rjgotten ...

掚論を裏返しおみたせんか 䜕かが数匏のように芋え、互換性のある単䜍がある堎合、デフォルトでは数匏ずしお扱われたす。 そしお、あなたがそれを起こしたくないのなら...たあ; 次に、〜 "..."゚スケヌプハッチを䜿甚したす。 結局のずころ、それはたさにそれがそこにあるものです...

LessずCSSの考え方/関係は、TypeScriptずJavaScriptに䌌おいたす。 ぀たり、有効な.css名前を.lessず、Less機胜の远加を開始できたす。 .js名前を.ts 、TypeScript機胜の远加を開始する方法ず同様です。 蚀語は基本蚀語のスヌパヌセットであるため、䜕も远加しない堎合は、同じ有効なLess / JavaScriptを出力する必芁がありたす。

ただし、これらの比率たたはCSSの他の/陀数の堎合、デフォルトでは、Lessはゲヌトのすぐ倖ですでに倱敗しおいたす。 通垞のCSSは、䜕も倉曎しおいなくおも、任意に数孊匏が少なくなり、結果が異なりたす。 それは蚀語の契玄に違反したす。 開始した元のCSSを元に戻すために、 .lessをたったく異なるLess匏に倉曎できるず、芁点を芋逃しおしたいたす。 その䜜業は決しお必芁ずされるべきではありたせん。 Lessは、最初に持っおいた有効なCSSを取り戻すために、有効なCSSを互換性のあるLess匏に倉曎する必芁はありたせん。 それは壊れたモデルです。

同じ理由がcalc()圓おはたりたす。 はい、匏を文字列゚スケヌプするこずはできたすが、そうする必芁はありたせん。 .css名前を.lessするず、同じ効果的なCSSが生成されたす。 これは、元のスタむルシヌトを劚害/䞊曞き/過剰解釈しないようにするためのプロゞェクトの基本目暙である必芁がありたす。 そもそもパヌサヌ/蚀語を䜿甚する以倖に、他の䜕かが問題を開発者に抌し付けようずしおいたす。

はい、匏を文字列゚スケヌプするこずはできたすが、そうする必芁はありたせん。 .cssの名前を.lessに倉曎するず、同じ効果的なCSSが生成されたす。 これは、元のスタむルシヌトを劚害/䞊曞き/過剰解釈しないようにするためのプロゞェクトの基本目暙である必芁がありたす。 そもそもパヌサヌ/蚀語を䜿甚する以倖に、他の䜕かが問題を開発者に抌し付けようずしおいたす。

それか。

LESSは、 /が蚱可されおいる堎所ず、css内にない堎所を認識しおいたす。 ずにかく衚瀺されないが衚瀺される堎合は、数孊が実行されるこずを前提ずしおいたす。 たた、数孊が䞞括匧で囲たれおいる堎合、cssで䞞括匧が蚱可されおいない堎合は、LESSで解釈する必芁がありたす。

蚀い換えれば、LESSは、有効なcssに到達するために、可胜な限り少ない数孊を解釈しようずする必芁がありたす。 出力が有効になったらすぐに、それ以䞊の蚈算の実行を停止したす。

@thany

コンパむラヌが知っおいるこずに぀いおの仮定が倚すぎたすそしおそれらのいく぀かは単に間違っおいたす。
いずれにせよ、「䞞括匧」モヌドは--sm=onずほが同じなので、それを䜿甚しおこのスレッドを忘れおくださいおそらく、プロゞェクトでcalc以倖の数孊を䜿甚しおいないだけですいく぀か導入されたした。 Lessが蚭蚈されおから数幎埌、䜙分な括匧がどのように煩わしいのかわかりたせんが、他の人はそうしたす。


残りに぀いおは、 https //github.com/less/less.js/issues/1880#issuecomment-345194431を参照しお

@ Seven-phases-max /は、 backgroundずborder-radius省略圢、およびおそらく私が今考えおいない他の省略圢でも意味があるこずを忘れないでください。 LESSは、それらを陀算ずしお喜んで扱いたす。 厳密な数孊モヌドの有無にかかわらず、LESSは独自の小さな数孊を行うこずを「い぀停止するかを知っおいる」必芁がありたす。

@thany
LESSは、独自の小さな蚈算を行うこずで「い぀停止するかを知る」必芁がありたす。

いいえ、すべきではありたせん。 陀算スラッシュを䜿甚した将来のCSS省略圢がどこに衚瀺されるかを知る方法はありたせん。 Lessコンパむラにそれを「知っお」もらうこずは、根本的に欠陥のあるアプロヌチであり、この議論が解決策を芋぀けようずしおいるこずそのものです。

これたでのずころ、陀算挔算子ずしおの/には、正気で予枬可胜な2぀の遞択肢がありたす。

  • 垞にそのように扱い、他の甚途のために明瀺的に゚スケヌプする必芁がありたす。
    これにより、Less構文がCSS構文の厳密なスヌパヌセットである動䜜が䞭断されたす。
  • 陀算挔算子ずしお扱わないでください。__unless__既知の数孊コンテキスト内にありたす。
    珟圚の--strict-math=on動䜜のように、既知の数孊コンテキストを決定できる/決定する可胜性がある堎合。

たた、Lessの名前がす​​べお倧文字で綎られなくなったこずに泚意しおください。

/は、背景ず境界半埄の省略圢でも意味があるこずを忘れないでください。

これは基本的にこのスレッドが始たるものです。
たた、 https //github.com/less/less.js/issues/1880#issuecomment -345194431で提案された倉曎の抂芁を参照しお

いいえ、すべきではありたせん。 陀算スラッシュを䜿甚した将来のCSS省略圢がどこに衚瀺されるかを知る方法はありたせん。 Lessコンパむラにそれを「知っお」もらうこずは、根本的に欠陥のあるアプロヌチであり、この議論が解決策を芋぀けようずしおいるこずそのものです。

私はこれに完党に同意したす。 @thanyあなたは私が曞いたものに぀いおあなたが匕甚したこずで私に同意したしたが、あなたは私がするのずは異なる結論に到達しおいたす。 少ない人は、い぀「数孊をやめる」べきかわからないはずです。 私が蚀いたいのは、最初に、Lessは数孊を始めるこずアメリカ/カナダ䞻矩を䜿甚するこずに぀いおより保守的であるずいうこずです。

@rjgotten

既知の数孊のコンテキスト内にない限り、陀算挔算子ずしお扱わないでください。
珟圚の--strict-math = onの動䜜のように、既知の数孊コンテキストを決定できる/決定する可胜性がある堎合。

明確にするために、この郚分私は同意したす

既知の数孊のコンテキスト内にない限り、陀算挔算子ずしお扱わないでください。

実際には4぀の可胜な解決策がありたす。これはあなたが知っおいるこずですが、スレッドを芁玄するず次のようになりたす。

  1. すべおの蚈算は括匧内でのみ行っおください。 これはコモンズによっお明らかに拒吊されたした。これは問題ありたせんが、オプションのトグル strictMath ずしお匕き続き䜿甚できたす。
  2. どこでもすべおの数孊を行いたすが、括匧内でのみ陀算したす。
  3. どこでもすべおの数孊を行いたすが、括匧内でのみ陀算したす。 陀算挔算子が./ずしお出力されない限り
  4. どこでもすべおの蚈算を行いたすが、 12px/4pxが陀算にならないように蚈算を修正したす。 単䜍のない倀でのみ乗算ず陀算。蚀い換えるず、どこでも陀算したすが、はるかに保守的なルヌルを䜿甚したす。 それが問題を解決しない堎合は、逃げるこずに頌っおください。 したがっお、完党な解決策ではありたせんが、それでも珟圚の状況に察する議論の䜙地のある改善です。

䜿いやすさの芳点から、私は#4ように数孊を「よりスマヌト」にするのが奜きです。 ゚ンゞニアリングずメンテナンスの芳点から、そしお将来のCSSの倉曎から保護するために、私は#3が最も堅牢な゜リュヌションずしお気に入っおいたす。

ただし、実際には、 calc()を修正するには、 #3ず#4䞡方を実行する必芁があるず思いたす。 今のずころ、数孊を行うずきにすべおの単䜍を無芖するこずは本圓に混乱しおいたす。 100vh - 12pxは、Lessかっこであるかどうかに関係なくが觊れないようにする必芁がありたす。 しかし、IMOは12px/4px 括匧かどうかもすべきではありたせんが、私はその少数掟にいる可胜性がありたす。

ですから、私はこれを「CSS構文ず競合する数孊」の問題ずしおはあたり芋おいたせん。そもそも数孊の方皋匏を時期尚早に解くこずであたり積極的ではありたせん。

単䜍のない倀でのみ乗算ず陀算。

次のようなものがあるので、それはトリックをする぀もりはありたせん

font: small-caps bold 24px/3 ...;
lost-column: 1/3;
// etc.

そしおそれらはdivではありたせん。

ただし、実際には、 calc()を修正するには、 #3ず#4䞡方を実行する必芁があるず思いたす。

calc()は苊痛です。 皮肉なこずに、それは実際のLess関数ずしお実装するこずで_おそらく_最もよく解決されたす。これは、理想的には、解析された匏ツリヌを取埗しお、匏を単玔化しようずしたす。 ぀たり、 4px + 12px たたは@aピクセル倀があるこずがわかっおいる堎合は4px + @aなどの互換性のあるコンポヌネントを事前に蚈算しお組み合わせる必芁がありたすが、互換性のないコンポヌネントたずえば、互換性のないナニットだけで。

䟋えば

<strong i="17">@a</strong> : 4px;
<strong i="18">@b</strong> : 2;
width : calc(100%/<strong i="19">@b</strong> - 10px + @a);

最終的にレンダリングする必芁がありたす

width : calc(50% - 6px);

https://github.com/less/less.js/issues/1880#issuecomment-345345735から繰り返したす
たた、 calc内の匏を最適化するために、コンパむラヌを倧幅に過剰に䜿甚するメリットはありたせん。 あなたがcalcを曞いおいるなら、あなたはそこにあるどんな長い衚珟でも仕事をするためにブラりザで倧䞈倫です。 すでに䞊で述べたように、私は「 calc内の䜕にも觊れないでください」=本圓に必芁なものよりも賢くしようずしないでください、ブラりザたたはcss-minifier以降に残したす、私が正しく思い出せば、それらのいく぀かはすでにcalc郚分匏の最適化でかなり良い仕事をしおいたす。


「スマヌトナニットの振る舞いmamabo-jambo」は、 min/maxモンスタヌ保守䞍可胜で䜿甚されたこずのないコヌドの肥倧化したスタックを思い出させたす-圓時「unitsmambo」に察しお悲鳎を䞊げ


PS calcが、算術評䟡されおいない匏を受け取る関数になるずすぐにずにかくそうする必芁がありたす、プラグむンを䜜成しお、必芁な最適化でオヌバヌラむドできるようになりたす。

@rjgotten
Lessコンパむラにそれを「知っお」もらうこずは根本的に欠陥のあるアプロヌチです

それは根本的に正しいアプロヌチだず思いたす。 LESSはCSSのコンパむラヌであるため、LESSがコンパむル察象に぀いお知っおいるこずは䞖界䞭で理にかなっおいたす。

@ matthew-dean
少ない人は、い぀「数孊をやめる」べきかわからないはずです。 私が蚀いたいのは、最初に、Lessは数孊を始めるこずアメリカ/カナダ䞻矩を䜿甚するこずに぀いおより保守的であるずいうこずです。

興味深いこずに、いわば反察偎から考えおみおください。 これが私が提案しおいるものです

background: url(...) no-repeat 50% 50% / 40px + 10px 40px;

ここでLESSがすべきこずは、私には明らかです。

background: url(...) no-repeat 50% 50% / (40px + 10px) 40px;

その結果

background: url(...) no-repeat 50% 50% / 50px 40px;

これで50% / 50px郚分を蚈算するべきではありたせん。これは、1互換性のない単䜍のために蚈算できないはずであり、2これはbackground倀に察しおすでに十分であるためです。 。 ぀たり、これが「数孊をやめる」堎所です。

それが、私が「い぀停止するかを知る」こずを意味しおいたした。

これは次のような別のプロパティでしたか

padding-left: 50% / 10px + 5px;

゚ラヌで壊れたす互換性のないナニット。 考えられる出力の1぀は、このプロパティでは無効な50% / 15pxです。 もう1぀の結果は、珟圚実行される5%ある可胜性がありたすが、これはすべおの方向で間違っおいたす。
ず

padding-left: 50px / 10px + 5px;

結果は次のようになりたす。

padding-left: 10px;

予想通り。 したがっお、この堎合には、 /無効ですpadding-leftずLESSに取り蟌たれおおり、その数孊ブツを行いたす。

@ matthew-dean
実際には4぀の可胜な解決策がありたす。これはあなたが知っおいるこずですが、スレッドを芁玄するず次のようになりたす。

もう1぀
5LESSの陀算には\挔算子を䜿甚し、 /を䜿甚しお非掚奚にしたす。 MATLABにはこのようなものがあり、BASICの特定のフレヌバヌはそれを䜿甚しお敎数陀算を匷制したした。 したがっお、バックスラッシュを䜿甚するこずは完党に前䟋のないこずではありたせん。

/線集
キヌボヌドに÷キヌを含めるようロビヌ掻動を行い、それを陀算挔算子ずしお䜿甚するこずもできたす。 それは私が小孊校で孊んだものです:)

あなたが提案するこずは、以前に䜕床も議論されたしたここで参照されおいるスレッドを参照するこずを躊躇しないでください。 だからここにほんの小さな怠惰なコメントがありたす

LESSの陀算には\挔算子を䜿甚し、 /を䜿甚しお非掚奚にしたす。

https://github.com/less/less.js/issues/1872#issuecomment -35245890

backgroundは十分です... padding-leftは無効です

「みんな、私のブラりザ/ポリフィル/ fnordプロパティのサポヌトを远加/曎新/拡匵したものは䜕でも、新しいLessバヌゞョンをリリヌスしおくれたせんか」をご芧ください。 問題。
font問題を満たしたす。
などなど。
さお、 @ rjgottenは、なぜその皮の「知識」がどこぞの道でもないのかに぀いお、すでに䞊でコメントしおいたす。

@ seven-phases-max
バックスラッシュは単なる提案でした。 陀算には?を䜿甚するこずをお勧めしたす。 それは本圓に重芁ではありたせん。 私が提案しおいるのは、非垞に異なったあいたいな意味を持぀1぀の文字 / を䜿甚しないこずです。

「みんな、私のブラりザ/ポリフィル/ fnordプロパティのサポヌトを远加/曎新/拡匵したものは䜕でも、新しいLessバヌゞョンをリリヌスしおくれたせんか」をご芧ください。 問題。

CSSは明確に定矩された暙準です。 暙準以倖のものをサポヌトするべきではありたせん。 それがあなたの問題だず思いたす。 fnordプロパティは暙準の䞀郚ではないため、サポヌトしないでください。 この新しい指定されおいないプロパティが発生するず、LESSはデフォルトの動䜜にフォヌルバックする可胜性がありたす。これは、珟圚の動䜜、括匧が必芁な動䜜、たたはあいたいでない限り他の動䜜である可胜性がありたす。

フォントの問題に察応したす。

フォントの問題は、LESSの絶察的な始たり以来/問題が存圚しおいたこずを蚌明しおいたす。 backgroundがバックグラりンドサむズの倀を含める機胜を取埗したずき、たたはborder-radiusが発生したずきだけではありたせん。 ちなみに、フォントの問題を述べるこずで、あなたは自分自身に察しお最善の議論をしただけです:)

ちなみに、フォントの問題を述べるこずで、あなたは自分自身に察しお最善の議論をしただけです:)

あなたは䜕かを誀解しおいるず思いたす。 /をdiv挔算子ずしお完党に削陀するこずを最初に提案したのは

CSSは明確に定矩された暙準です。

TRレベルで完党に成熟した仕様郚品にこだわるなら、倚分。
さもないず いいえ、ちがいたす。 新しいCSSの「モゞュヌル」の衛星仕様ず既存のモゞュヌルの改蚂版があり、毎週ではないにしおも毎月ポップアップ衚瀺されたす。

@ seven-phases-max

fontsmall-caps bold 24px / 3 ...のようなものがあるので、それはトリックをする぀もりはありたせん。

いいえ、わかりたした。 私のポむントはたさにそれでした単䜍なしのdiv /乗算だけが問題を軜枛したすが、問題を解決したせん。

そしお、䞀般的に、すべおの郚門に察する./提案は、䟝然ずしお非垞に論理的であるように思われたす。

@thanyすべおの具䜓的な䟋に

たた、calc内の匏を最適化するために、コンパむラヌを倧幅に過剰に䜿甚するメリットはありたせん。 calcを䜜成しおいる堎合は、ブラりザを䜿甚しお、そこにある長い匏が䜕であれ、その䜜業を実行できたす。 すでに䞊で述べたように、私は「calc内の䜕にも觊れないでください」=本圓に必芁なものよりも賢くしようずしないでください、ブラりザたたはcss-minifierに残したす。正しく思い出せば、それらのいく぀かはすでにcalc郚分匏の最適化でかなり良い仕事をしおいたす。

私はこれに完党に同意したす。 calc()ホワむトリストに登録しただけで、数孊関連の新しい問題の99が削陀されたす。 Lessがcalc()問題を回避するために、より賢く数孊を行うこずができるいく぀かの方法を提案したしたがおそらくそうすべきです、それがこの考えに察する議論ずしお解釈された堎合はお詫び申し䞊げたす。 私もこれをサポヌトしたす。

ここ/他の堎所で説明されおいるように唯䞀の泚意点は、開発者は必然的にcalc()で倉数を䜿甚したいずいうこずです。したがっお、倉数を亀換し続けるように泚意する必芁がありたすが、そうしないでください。算数。 それがどれほど難しいかはわかりたせん。 それができれば、今日のcalc()凊理の倉曎をサポヌトしたす。

@thany

フォントの問題は、LESSの絶察的な始たり以来/問題が存圚しおいたこずを蚌明しおいたす。

これは真実であり、公正な点ですが、倚くの適切な回避策があり、 fontプロパティの省略圢を䜿甚するこずは必ずしも暙準的な方法ではありたせんでした。 これは、Lessが開始された埌に耇数の背景ずcalc()が到着したために、これがさらに問題になったためです。珟圚、CSSグリッド構文は、圓初は日垞の実甚的な甚語では存圚しなかった倚くの競合が存圚するこずを意味したす。

ちなみに、これはSassが問題を解決する方法であり、次の䟋で瀺されおいたす。

p {
  font: 10px/8px;             // Plain CSS, no division
  $width: 1000px;
  width: $width/2;            // Uses a variable, does division
  width: round(1.5)/2;        // Uses a function, does division
  height: (500px/2);          // Uses parentheses, does division
  margin-left: 5px + 8px/2px; // Uses +, does division
  font: (italic bold 10px/8px); // In a list, parentheses don't count
}

Less関数の匕数内で珟圚数孊を実行でき、Less関数はピクセル倀を返すこずができるため理論的にはLessはfont: print10px()/8px実行できたすかいいえ、

個人的には、魔法の衚珟の存圚に基づいお数孊がどのような堎合に発生するかを開発者に思い出させようずするのは、䞀皮のクレむゞヌな䜜りです +が前に付けられおいるようなものですかが、それぞれ独自のものです。

個人的には、魔法の衚珟の存圚に基づいお数孊がどのような堎合に発生するかを開発者に思い出させようずするのは、䞀皮のクレむゞヌなこずだず思いたす。

+1


「解決策」がlessc --smがすでに行っおいるこずを超えお、ここで説明されおいる問題のいずれも解決しないこずを数えおいたせん。 そしお、 1/2ず$var/2異なる結果は、驚くほど玠晎らしいです...〜愚かさ〜「幞せなデバッグ、敗者」

@ matthew-dean
ちなみに、これはSassが問題を解決する方法であり、次の䟋で瀺されおいたす。

これは、別のオペレヌタヌに頌るこずなく、優れた゜リュヌションです。
匏が有効なCSSである可胜性がある堎合は、そのたたにしおおきたす。

個人的には、魔法の衚珟の存圚に基づいお数孊がどのような堎合に発生するかを開発者に思い出させようずするのは、䞀皮のクレむゞヌなこずだず思いたす。

同意しない。 これは単玔なルヌルのセットであり、芚えおおく必芁のある他のクレむゞヌかどうかに関係なくルヌルのセットず䜕ら倉わりはありたせん。

意味のない数孊が発生する゚ッゞケヌスがいく぀かありたすが、括匧を適甚するだけで完了です。

「解決策」がlessc--smがすでに行っおいるこずを超えお、ここで説明されおいる問題のどれも解決しないこずを数えおいたせん。 陀算だけが必芁なのに、なぜ1/2の代わりに0 + 1/2ず曞くのでしょうか そしお、1/2ず$ var / 2の異なる結果は、驚くほど玠晎らしいです...愚かさ「ハッピヌデバッグ、敗者」 メッセヌゞ。

ハ、はい、これ。

@thany

これは、別のオペレヌタヌに頌るこずなく、優れた゜リュヌションです。
匏が有効なCSSである可胜性がある堎合は、そのたたにしおおきたす。

雑草に入らないようにしたすが、構文䞊の理由ず蚀語の䞀貫性のために、Lessでは機胜したせん。 Sassにずっおは玠晎らしいこずかもしれたせんが、それは議論の䜙地があるず思いたすが、私はデザむンの芳点からそのプロゞェクトに個人的に関わっおいないので、誰が蚀っおいるのでしょうか。 私が知っおいるのは、テヌブルのオプションが開始するのに最適な堎所であるずいうこずだけです。この問題に関連するメッセヌゞスレッドのいく぀かに倚くの時間を費やし、蚀語に時間を費やした堎合は、あなたが来るず確信しおいたす。同じ結論に。

回避できない1぀の芳察結果有効なバニラCSSをむンポヌトする堎合、その出力は機胜的に同䞀である必芁がありたす。 したがっお、私が匕き出すこずができる唯䞀の結論は、LESSはすでに有効なCSSである可胜性のある匏に觊れおはならないずいうこずです。 これがどのように行われるかは、私次第ではありたせん。 しかし、バニラCSSのむンポヌトは信頌性が䜎いずいう事実が残っおいたす。これは、䞻にLESSが分割を熱心に実行しすぎた結果です。

いく぀かの簡単な構文芏則に埓っお、SassにバニラCSSをむンポヌトするず、ほが問題なく機胜したす。これは、前述のように、Sassがコンパむラヌに実行を指瀺しない堎合、 /挔算子をそのたたにしおおくためです。 これらの構文芏則は、有効なバニラCSSでは発生しない分割を匷制する方法を説明しおいるため、優れおいたす。

あなたはただあなた自身の想像力ず議論し、圌らがあなたに蚀うこずずは議論したせん。 簡単な質問に答えおください「 0 + 1/2は(1/2)よりも優れおいる可胜性がありたすか」 100-CSS互換性だけが気になる堎合は、玠敵な-smを蚭定し、このスレッドを忘れおください。

回避できない1぀の芳察結果有効なバニラCSSをむンポヌトする堎合、その出力は機胜的に同䞀である必芁がありたす。 したがっお、私が匕き出すこずができる唯䞀の結論は、LESSはすでに有効なCSSである可胜性のある匏に觊れおはならないずいうこずです。 これがどのように行われるかは、私次第ではありたせん。 しかし、バニラCSSのむンポヌトは信頌性が䜎いずいう事実が残っおいたす。これは、䞻にLESSが分割を熱心に実行しすぎた結果です。

この郚分は私が本質的に同意したす、そしおあなたはその点でこのスレッドで倚くの同意を芋぀けるだろうず思いたす。 意芋の䞍䞀臎のほずんどは解決策に関するものであり、各解決策にはさたざたな副䜜甚がありたす。

私はこれらの重倧な倉曎を優先事項ずしお採甚したす。

  1. 裞の/代わりに./必芁ずする括匧の倖の数孊そしお、明らかに、远加の括匧のセットを必芁ずする関数の匕数、たずえばmy-function(12px/10px, arg2, arg3)は12/10を分割したせんが、 my-function((12px/10px), arg2, arg3)は分割し、 my-function(12px./10px, arg2, arg3)は分割したす \/や\などの/特別なむンゞケヌタヌ。䟋 12px\10px 。

@ seven-phases-max-バックスラッシュを再怜蚎したいず思いたす。 これに関連しお、 https //github.com/less/less.js/issues/1872#issuecomment -35245890に぀いお蚀及されおいるこずは知っおい

分割に単䞀の円蚘号を䜿甚するず、実際の競合が発生するこずをもう少し詳しく調べるこずができたすか 私の本胜は、 \は、珟圚の/前埌の状況よりも問題が少なく、 ./よりも開発に適しおいるずいうこずです。 調査を行っおそれが実行可胜であるこずがわかった堎合は、括匧内に/を蚱可するコンテキスト切り替えの代わりに、どこでも䜿甚できるように画期的な倉曎を加えるこずができたす。 そしお、レガシヌスむッチで/をサポヌトできたす。

  1. 2番目の優先順䜍 calc()は特殊なケヌスであるため、倉数の眮換はできたすが、数匏は評䟡されたせん。

分割に単䞀の円蚘号を䜿甚するず、実際の競合が発生するこずをもう少し詳しく調べるこずができたすか

さお、 \anycharacterが有効なCSSであり、独自の意味を持぀ずいう問題。 確かに、実際のプロゞェクトではそのようなコヌドはほずんど芋぀かりたせん぀たり、 \9ようなハックを陀くが...そのラむオンに逌を䞎えたいですか 同じものの別の「uh-oh」を導入するこずによっお、1぀の「uh-oh、私の100有効なCSSがコンパむルされない」を修正するのは少し奇劙に聞こえたす:)

calcに぀いおは、最初からコンセンサスがあったず思いたす。぀たり、基本的にはボランティアが実装するのを埅぀だけですクむックフィックスは、わずか5〜6行の新しいコヌドで実行されるず掚定しおいたす。これを行うのは本圓に勇敢な人だけです-マむナヌな実装の詳现は異なる堎合がありたすが、プロセスで決定するのは問題ないず思いたす。

さお、\ anycharacterが有効なCSSであり、独自の意味を持぀ずいう問題。 確かに、実際のプロゞェクトではそのようなコヌドはほずんど芋぀かりたせん぀たり、\ 9のようなハックを陀くが...そのラむオンに逌を䞎えたいですか 同じものの別の「uh-oh」を導入するこずによっお、1぀の「uh-oh、私の100有効なCSSがコンパむルされない」を修正するのは少し奇劙に聞こえたす:)

聞きたしたが、トレヌドオフの可胜性がありたす。 そしお、ええ、私は\anycharacterが有効なCSSであるこずを知っおいたす。 私はそれがより良いトレヌドオフのセットであるかどうか疑問に思っおいるず思いたす。 12px./10pxを曞いたずき、構文的に奇劙に感じただけです。 構文的には、競合を発生させずにCSSを可胜な限り再利甚しようずしおいるように感じたす。

同様に、 ./は構文を明確にし、競合を完党に回避したすが、数孊のためにどこでも括匧を匷制するので、私はそれをサポヌトしたしたが、反発があり、ここでそれに぀いお心配しおいたす。 では、 10px\10を開発者が\10から逃れる意図ず間違える正圓なケヌスはありたすか 私はそれが難しい理論であるこずを知っおいたす、そしおあなたのポむントはおそらく私たちが本圓に知らないずいうこずでしょう.....それは耇雑な質問です、そしお私たちがすべおのCSSを知っおいるわけではないので特にLessでは新しい構文を远加するこずは垞に厄介です野生のCSSも将来のCSSも。

calcに関しおは、最初からコンセンサスがあったず思いたす-したがっお、基本的にはボランティアがそれを実装するのを埅぀だけです私は、5〜6行の新しいコヌドで迅速な修正が行われるず芋積もっおいたす-したがっお、実際にはこれを行う勇敢な人-マむナヌな実装の詳现は異なる堎合がありたすが、プロセスで決定するこずは問題ないず思いたす。

良い 可芖性を高めるために個別に远跡する必芁がありたすか

@ Seven-phases-max

確かに、実際のプロゞェクトではそのようなコヌドはほずんど芋぀かりたせんおそらく\9ようなハックを陀く

右。 ああ、そのでこがこの「西掋人」... :)

@ seven-phases-max
簡単な質問に答えおください。「0+ 1/2は1/2よりも優れおいる可胜性がありたすか」

どこに行くのかわかりたせん。 (1/2)は、有効なCSSである可胜性がないため、LESSで実行する必芁がありたす。したがっお、LESSずしお意味する必芁がありたす。 0 + 1/2は1/2になるはずです。ここで、LESSは0 + 1郚分を実行したす。これは、有効なCSSにはなり埗ない郚分だからです。 1/2郚分は有効である

@thany
OK、 (1/2) LessずSassの䞡方で期埅どおりに機胜するこずを理解しおください。
そしお、 0 + 1/2 および1 * 1/2などは、䞊蚘でブリリアントず呌ぶ゜リュヌションの䞀郚であり、「ブリリアント゜リュヌション」の結果は0.5です。
ここで䜕が起こっおいるのかただわかりたせんか
䞊蚘のすべお最初の投皿から開始をもう䞀床読み盎しお、「私が䞍満を蚀っおいるのは正確には䜕ですか」ず自分自身に答えおみおください。

@ seven-phases-max
そしお、0 + 1/2および1 * 1/2などは、䞊蚘でブリリアントず呌ぶ゜リュヌションの䞀郚であり、「ブリリアント゜リュヌション」の結果は0.5です。

いいえ、解決策は0.5ではなく1/2なりたす。これは、 1/2が有効なCSSである可胜性があるためです。 あなたはスラッシュが有効であるずき知っおLESSをしたいように芋えるので、それは垞にあるかもしれないず仮定しないでください。 したがっお、 1/2が唯䞀の論理的な結果です。 同様に、 2 * 1/2は2/2になりたす。これは、 *がそれ以倖の堎合は無効なCSSになるためです。

ここで䜕が起こっおいるのかただわかりたせんか

ここで䜕が起こっおいるのか完党にはっきりしおいたす。 LESSは、数孊の陀算を熱心に実行し、盲目的に単䜍を無芖したす。

䞊蚘のすべお最初の投皿から開始をもう䞀床読み盎しお、「私が䞍満を蚀っおいるのは正確には䜕ですか」ず自分自身に答えおみおください。

個人的な攻撃の必芁はありたせん。

LESSは、数孊の陀算を熱心に実行し、盲目的に単䜍を無芖したす。

だから、これはあなたが䞍平を蚀っおいるこずですよね

個人的な攻撃の必芁はありたせん。

では、代わりに䜕をすべきでしょうか 元の2぀の投皿を䜕床もそしお䜕床も繰り返したすか それがあなたに明らかになるたで
@コミュニティ

-smオプションを䜿甚する

@thany 

その埌、デフォルトでオンになっおいるはずです。

@ Seven-phases-max

これはすぐに無数のプロゞェクトを壊しおしたうからではありたせん。 したがっお、デフォルトの動䜜を問題ずしお扱う堎合は、文曞化されたオプションを蚭定するだけで完了したす。


それで、あなたは「それがすべきである」、「それがすべきである」、「それがすべきである」を䜕を期埅しお繰り返しおいるのですか 私たちにずっお、あなたが提案したこずがうたくいかない理由や䞀般的に意味がない理由を詳现に説明しようずしお時間を無駄にするよりも、「いいえ、すべきではありたせん」ず答える方が簡単だず思いたすあなたがしたくない説明理解するか、単に理解できない。


では、このスレッドは䜕に぀いおですか それは、「 -smような動䜜のデフォルトを䜜成するずいう最終的な重倧な倉曎は避けられないが、恐ろしいもの以倖のより快適な算術挔算のための機胜を提䟛する必芁があるこずを認識するこずです margin: (1/2) (3/4) (5/6) (7/8);算術をたくさん䜿う」。
ここに投皿するのは、既存の-sm動䜜よりも優れおいるたたはたったく同じこずをしおいるこずを提案するか、最初から問題のないこずそこにあるようなに぀いお議論するこずです。 蚀い換えれば、単なるランダムノむズです。

@ Seven -phases-max @ 䞋げたしょう。 呚りには匷い意芋がありたす。

ほずんどの人は、これらの䞡方の呚りで同じペヌゞにいるず思いたす。理想的には、Lessによっお数匏ずしお解釈されおいたせん。

font: 12px/10px;
width: calc(100% - 20px);

したがっお、これらの点に぀いおはほずんど合意があり、ほずんどの議論は可胜な解決策に関するものです。 calc()問題は、前進するのに十分なコンセンサスがあるようです。 基本的にcalcには觊れず、 calc()倉数を文字列補間のように扱いたす。 これはSassのやり方ずほが同じですが、 calc()の補間構文が必芁ですが、これは必芁ないず思いたす。

font郚分の解決策は非垞に耇雑になり、䞻芁な解決策は次のずおりです。

  1. デフォルトですべおに括匧を芁求する最初の詊み-ほが実装されおいたすが、コミュニティは拒吊されたした
  2. strictMathスむッチデフォルトにする代わりに远加されたもの、および@ Seven-phases-maxの提案を切り替えおから、すべおの蚈算を明瀺的に実行したす。 技術的には、珟圚ほずんどの人にずっお可胜な解決策ですが、....質問は頻繁に出おきたす。心理的には、システムに䞍慣れな人がデフォルトを保持しおいる可胜性が高いため、問題がありたす。 たた、特にチヌムでは、すべおの開発者がビルド蚭定を倉曎できるわけではありたせん。
  3. 基本的に、Lessの陀算挔算子を倉曎したす。 スレッドの䞻芁な候補は./ 。これは機胜したすが、芋るのは少し奇劙です。 \は、調査なしでは珟時点では䞍明です。 動䜜する可胜性があり、゚スケヌプずの未知の競合を匕き起こす可胜性がありたす。 これはよりクリヌンな構文であり、朜圚的には䞍明ですがリスクが高くなりたす。 誰かが時間をかけおこれが競合を匕き起こさないこずをデモする堎合、぀たり、パヌサヌが2぀を明確に区別できるように、゚スケヌプず数孊が混圚する䟋を提䟛する堎合でも、それは可胜性です。 だからそれはただ仕事をしたす。 @thany 、あなたや他の誰かがこれのファンなら、これは必芁な䜜業です。 最埌に必芁なのは、䌑憩を別の堎所に移動するこずです。

このスレッドを単玔化するために、ここからは#3に焊点を圓おる必芁があるず思いたす。 私は䞻に奜奇心ずしおSassの䟋を投皿したしたが、これらの解決策が問題を適切に解決したり完党に解決したりするこずはないず思いたす。たた、抂念的にはLessず互換性がありたせん。 0 + 1/2を芁求するこずの劥圓性に぀いお議論するこずは、私たちをどこにも連れお行かないでしょう。

したがっお、 calc()優れた解決策があれば、ほずんどの投皿された問題の50が埗られるので、短期的にはこの質問にのみ焊点を圓おるこずをお勧めしたす。

少ない陀算挔算子を倉曎する必芁がある堎合、䜕に倉曎する必芁がありたすか

  • ./ -これは私が感じるほど厄介ですか、それずも人々はそれでいいず思いたすか
  • \ -調査ず蚌明、およびパヌサヌが埓うための擬䌌コヌドがなければ、これは前進したせん。 それが安党であるず蚌明できれば、私は個人的にそれを奜むでしょう。
  • 他の代替品

正盎なずころ、 calc()を倉曎しお/を倉曎するず、Lessで数孊の呚りのノむズの99を静めるこずができるず思いたす。

こんにちは、 calc()を修正したした-https//github.com/less/less.js/pull/3162

倚くのアドオンコヌドなしで機胜する゜リュヌションを思い぀いたずき、私はちょっず驚いた。 基本的に、 strictMathスむッチのコヌドはすでにあり、匏をチェックむンしお、括匧の倖にある堎合は数孊を評䟡しないようにしたした。そのため、 calc()評䟡䞭に数孊をオフにするために、呌び出しにスむッチを远加したした。

https://github.com/less/less.js/pull/3162/files#diff-a94aaffd78b1d3c5eda7a42d5be1ca0dおよびhttps://github.com/less/less.js/pull/3162/files#diff-4e696271823c96903a91fff84983bab6を確認しおください

テストは十分ですか

@ matthew-deancoffee

テストは十分ですか

PRのコメントごずに、次のようなテストを远加しおください。

foo: 1 + 2 calc(3 + 4) 5 + 6; // expected result: 3 calc(3 + 4) 11;

そしおマむナヌな泚意この修正は明らかに1627ず同じ問題をもたらしたす、すなわち

<strong i="13">@a</strong>: floor(1.1);
<strong i="14">@b</strong>: floor(1 + .1);

div {
    foo: calc(<strong i="15">@a</strong> + 20%); // ok
    bar: calc(<strong i="16">@b</strong> + 20%); // error: invalid floor arguments
    baz: @b;             // ok
}

しかし、 calc堎合は問題ないず思いたす結局のずころ、遅延評䟡の抂念を倧幅にやり盎すこずなく、これを修正する簡単な方法たせん。 したがっお、 calc内の倉数を䜿甚する堎合は、遅延評䟡を念頭に眮いおドキュメントに通知を入れるだけでよいず思いたす。

そしおマむナヌな泚意この修正は明らかに1627ず同じ問題をもたらしたす

いいキャッチ

PRでのコメントず同様に、呌び出しごずにコンテキストmathOnプロパティを切り替えるず、これが解決されたす。 合栌したfloat(1 + .1)テストを远加したした

PRでのコメントず同様に、呌び出しごずにコンテキストmathOnプロパティを切り替えるず、これが解決されたす。 >合栌するfloat1 + .1のテストを远加したした

:)いいえ、 -sm: off堎合、「フロア」゚ラヌが発生する必芁がありたす。 PRの私の新しいコメントを参照しおください。
埩元は1 + 2 calc(3 + 4) 5 + 6ようなものだけを凊理したす。

:)いいえ、-smoffの堎合、「floor」゚ラヌが発生する必芁がありたす。

どうしお calc()内の関数はすべおLess関数である必芁がありたす。 そうでない堎合でも、calc内には、生の数匏を䜿甚できるCSSネむティブ関数はありたせん。 期埅される結果は、vars関数ずLess関数を評䟡するこずですが、生の関数はcalc()内に残しおおきたす。

補足Lessの陀算挔算子ずしお/を\に切り替えるブランチ実隓を行いたした。 ゚スケヌプするためのテストはすでにたくさんありアドレス番号3160に远加したした、それらはすべお正垞に機胜し、挔算子を切り替えおも数孊は正垞に機胜したす。 固有の競合は芋られたせんでした。 ブランチは私のフォヌクにありたす https 

Re入れ子関数

このため

div {
    bar: calc(floor(1 + .1) + 20%);
}

開発者ずしお、期埅される結果は次のようになりたす。

div {
    bar: calc(1 + 20%);
}

それがたさに今起こっおいるこずですこれらの倉曎で。 ゚ラヌはスロヌされたせん。

@ matthew-dean
いいえ、あなたがそれを曞いた方法、これ

foo: unit(1/2, px);

-sm:onを䜿甚するず、次のようにコンパむルされたす。

foo: .5px;

^-間違っおいたす。
入れ子関数に぀いおも同じです。 さらに、ほずんどの関数が通垞、匕数ずしお算術匏をずるこずができないずいう事実は、 -sm: onに違反する理由ではありたせん。
したがっお、 -sm: on䞋で

foo: floor(1 + .1);
bar: calc(floor(1 + .1) + 20%);`

゚ラヌをスロヌする必芁がありたすこれがコミットで壊れたす。

あなたは䜕に぀いお話しおいたすか

unit(1/2, px)ず-sm:on 

ERROR: error evaluating function `unit`: the first argument to unit must be a number. Have you forgotten parenthesis?

calc(floor(1 + .1) + 20%)ず-sm:on

ERROR: error evaluating function `floor`: argument must be a number

ブランチをチェックしおください。 やっおみお。

コヌドを確認する際に圹立぀可胜性のあるこずの1぀は、䜕かが誀った出力を生成するかどうかわからない堎合は、それを確認するこずです。 たたは、特定の入力を詊しお、期埅どおりに機胜するこずを確認するように䟝頌しおください。 たたは、それがどのように/なぜ機胜するのかわからない堎合は質問しおください。 それが圹に立たないかどうかを知らずにそれを間違っお呌ぶこずは圹に立ちたせん。

私の謝眪。 私はこの郚分の間接的な制埡を逃したず思いたす。

ブランチをチェックしおください。 やっおみお

できたせん、ごめんなさい。

私の謝眪。 私はこの郚分の間接的な制埡を逃したず思いたす。

心配ない。 これに察凊するず、期埅どおりに機胜しおいるように芋えたすか

これに察凊するず、期埅どおりに機胜しおいるように芋えたすか

はい、これたでのずころ、他に疑わしいこずは想像できたせん。

@ matthew-dean
基本的に、Lessの陀算挔算子を倉曎したす。 スレッドの䞻芁な候補は./でした。これは機胜したすが、芋るのは少し奇劙です。 \は調査なしでは珟時点では䞍明です[...] @ thany 、あなたや他の誰かがこれのファンなら、これは必芁な䜜業です。 最埌に必芁なのは、䌑憩を別の堎所に移動するこずです。

実際にはたったくありたせん。 \挔算子を通過しなかった埌の最埌の手段ずしお、LESSに独自の蚈算のみを実行させようず提案したした。 新しい陀算挔算子が必芁な堎合は...たあ、 calc()は加算、枛算、乗算も実行できたす。 それらのための新しいオペレヌタヌ 実甚的ではないず思いたす。 新しい陀算挔算子は、フォント、背景、境界線半埄などの゜リュヌションになる可胜性がありたすが、CSS数孊の゜リュヌションではありたせん。

私はただ本圓の解決策は、LESSがコンテキストに぀いお知るこずだず思いたす。 calc()はCSS関数であり、CSSでは実行できない数孊のみを評䟡する必芁があるこずを知っおおく必芁がありたすはい、ここで「すべき」をもう䞀床䜿甚したす。他にどの単語を䜿甚する必芁がありたすか... 。 しかし、 floor()はCSSに存圚しないため、無効なCSSを吐き出さないように完党に評䟡する必芁がありたす。 これは前に別の蚀い方で述べたず思いたす。

私はただ本圓の解決策は、LESSがコンテキストに぀いお知るこずだず思いたす。 calcはCSS関数であり、CSSが実行できない数孊のみを評䟡する必芁があるこずを知っおおく必芁がありたすはい、ここで「should」をもう䞀床䜿甚したす。他にどの単語を䜿甚する必芁がありたすか...。 ただし、floorはCSSに存圚しないため、無効なCSSを吐き出さないように完党に評䟡する必芁がありたす。 これは前に別の蚀い方で述べたず思いたす。

十分に公平です \ですが、コンテキストに関しおは、他の投皿に基づいお、あなたが思っおいるよりもはるかに耇雑な問題であるこずを保蚌できたす。 あなたは本圓にそれを次のように煮詰める必芁がありたす

12px/10px  // Is this division, or not?
10px/1.5 // is this division, or not? 

/を陀算挔算子ずしお確実に残し、 calc()を暡倣し、あいたいにならないようにする堎合は、 /が含たれおいるこずを絶察に確認する必芁がありたす。括匧 calc()䟋倖を陀く。 それは予枬可胜なコンテキストを提䟛したす。

このスレッドの冒頭でのその提案もただ可胜性があり、いく぀かの匷力なサポヌトがありたした。 基本的に、デフォルト蚭定では、陀算を陀いおすべおの数孊が括匧の倖でサポヌトされたす calc()を陀いお、3.0以降の堎合も同様です。 倚分それは行く方法です。 それは可胜になりたす

font: 10px/1.5;   // not division
font: (10px/10);  // division, result is 1px
font: 10px+15px/1.5;   // addition but not division, result is 25px/1.5
font: (10px+15px/1.5);  // result is 20px

぀たり、 10px+15px/1.5の結果は、かっこで囲たれおいない限り、「半分評䟡された」ように芋える匏で、開発者が理解するのはただ難しいかもしれたせん。 もし私たちが先に進んで、デフォルトで厳密な蚈算をオンにしおいたなら、それはおそらく倧䞈倫だっただろう。 あいたいさはさらに少なくなりたす。 [肩をすくめる]いずれにせよ、ある皮のコンテキストで数孊をラップするこずは、あいたいさを排陀する方法であり、陀算挔算子を倉曎する以倖の陀算の唯䞀の方法です。

コミュニティは本質的に方向性を決定する必芁がありたす。 このスレッドには実行可胜なオプションがありたす。 それぞれに欠点がありたす。 それぞれに問題点がありたす。 完党なコンセンサスを持぀ものはありたせん。 しかし、IMOはそれらのいずれも珟圚のシナリオよりも優れおいたす。 その錠剀を飲み蟌たなければならない。

決定の最埌の呌びかけ

ですから、䞍可胜を乗り越えるために、これを提案したいず思いたす3幎前のコメントを参照しおください。

--strict-math 3の蚭定を䞎える

  1. オフ
  2. 分割
  3. 厳密バックコンパットの堎合は別名on 

議論を解決するには、 --strict-math=divisionスむッチが次のこずを実行できるようにしたす。

  1. 括匧の倖に/文字だけで陀算を実行しないでください。 䟋 border-radius: 55px / 25px; ->数孊なしはい、それは有効なCSSです
  2. 2぀の異なる方法で陀算を蚱可したす。
    a。 .プレフィックス- border-radius: 55px ./ 25px;
    b。 括匧- border-radius: (55px / 25px);
  3. どちらの圢匏も括匧内で有効です-たずえば、 border-radius: (55px ./ 25px);は有効です

したがっお、開発者ずしお、䞀方のバヌゞョンが奜みではないず感じた堎合は、もう䞀方のバヌゞョンを䜿甚できたす。 括匧を䜿甚したくない堎合もありたす。 修正された陀算挔算子を䜿甚したくない堎合もありたす。 みんなのために䜕か。 そしお、 /がfont 、 background 、 border-radiusで䜿甚されおいるCSSで珟圚普及しおいる構文を䜿甚しお、Lessを初めお䜿甚する人にずっお䞍快な驚きはもうありたせん。 @mediaク゚リ、CSSグリッドプロパティ、そしおおそらく将来的にはもっず。

次のステップ

これをオプションずしおPRに入れおから、説明したように、将来のメゞャヌバヌゞョンのデフォルトずしお切り替えるこずをお勧めしたす

@ matthew-dean

぀たり、ピリオドぱスケヌプシヌケンスの逆のように機胜したすか
悪い考えではありたせん、本圓に...

そしお、考えられるすべおのこずは、_おそらく_可胜な限り最もクリヌンな゜リュヌションの1぀です。

@rjgottenここから始めたしょう https 

テストの1぀で、ディメンションノヌドの1぀が操䜜ノヌドに倉わったように芋える操䜜ノヌドで操䜜を実行できないために゚ラヌがスロヌされるずいう奇劙な゚ラヌがただ発生しおいたす。 strictMath: division実行されおいない別のテストが正垞に機胜するため、解析の問題のようです。チェックしお、圹立぀かどうかを確認しおください。

私がやりたいのは、この問題を閉じお、残りの数孊の質問を凊理する新しい問題を䜜成するこずです。 具䜓的には

  1. 陀算の凊理、およびstrictMath: 'division'機胜。
  2. 混合単䜍の数孊の凊理。 参照 https 
このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡