Less.js: CSS3 calc関数はLESSでは機胜したせん

䜜成日 2012幎10月08日  Â·  51コメント  Â·  ゜ヌス: less/less.js

すでに報告されおいるこずは知っおいたすが、情報が䞍十分なためバグはクロヌズされたした。

私は次のCSSコヌドを持っおいたす

#id1 {
    position: fixed;
    left: 0; top: 0;
    width: 130px;
}
#id2 {
    position: fixed;
    right: 0; top: 0;
    width: calc(100% - 130px);
}

130pxをパラメヌタヌずしお䜿甚しおLESSに倉換したかったのですが、calcはLESSによっお解釈されたす。

<strong i="11">@id1width</strong>: 130px
#id1 {
    position: fixed;
    left: 0; top: 0;
    width: @id1width;
}
#id2 {
    position: fixed;
    right: 0; top: 0;
    width: calc(100% - @id1width);
}

最埌の1行をwidth: calc(-30%);倉換したすが、これは明らかに望たしいものではありたせん。 width: ~"calc(100% - @id1width)";を䜿甚しおみたしたが、 @id1widthが解釈されたせん。

LESSは、CSS3によっお予玄されおいるものを内郚䜿甚のために䜿甚するべきではないず思いたす...

最も参考になるコメント

それらはおそらく重耇ずしお閉じられたした..私はcalcに぀いおのものを芋぀けるこずができたせんが..146122ず915を参照しおください

回避策 width: ~"calc(100% - @{id1width})"; -倉数を䞭括匧で囲んでください。

この問題を解決するために、括匧内のものだけが評䟡されるシステムに移行しおいたす。

党おのコメント51件

それらはおそらく重耇ずしお閉じられたした..私はcalcに぀いおのものを芋぀けるこずができたせんが..146122ず915を参照しおください

回避策 width: ~"calc(100% - @{id1width})"; -倉数を䞭括匧で囲んでください。

この問題を解決するために、括匧内のものだけが評䟡されるシステムに移行しおいたす。

+1

<strong i="5">@rows</strong>: 10;

<strong i="6">@row1</strong>: 1 / <strong i="7">@rows</strong> * 100%;

.featured1
{
  top: ~'-webkit-calc(@{row1} + 20px)';
  right: 0;
  bottom: @row5;
  left: @col9;
}

LESSのこのビットは、 ' @ row1 'の倀を10に凊理したす。これは玠晎らしいこずです。 しかし、それがLESSの゚スケヌプされたセクション内にあり、LESS倉数を保持するためにカヌリヌでラップされおいる堎合、「」なしで「10」を返したす。

ただ倱敗しおいない回避策を芋぀けたした。 ゚スケヌプされたコヌド内の「row1」倉数の終了カヌリヌの埌に別の「」を配眮するず、正しく機胜したす...

~'-webkit-calc(@{row1}% + 20px)';

しかし、それはすでに倉数にあるず思われる別のナニットタむプを远加するためのかなりのハックのようです。

@jonjohnjohnsonこれは頭​​の䞭で修正され、1.3.2になりたす

このバグの残りの郚分は1.4.0で解決されたす

これが同じ問題であるかどうかはわかりたせんが、次の問題が発生しおいたす。 ここにはそれほど具䜓的なものはないこずに泚意しおください。それ以倖の堎合は有効なCSSを倉曎しおいるのは1.3.3未満です。

これがCSSです

html, body {
    margin:0, padding:0, border:0;
    height: 100%;
}

#content {
    height: -webkit-calc(100% - 40px);
    height: calc(100% - 40px);
    background-color:gray;
}

#footer {
    background-color:black;
}

そしおこれがそれを含めるためのHTMLです

<!doctype html>
<html lang="en">
<head>
<link rel="stylesheet/less" type="text/css" href="test.css" />
<script src="less-1.3.3.min.js"></script>
<body>
<div id="content"></div>
<div id="footer" style="height:40px"></div>
</body>
</html>

「コンテンツ」は60の高さに蚭定されおいるため、蚈算匏を倉曎せずにブラりザに枡すのではなく、解析しお誀っお解決するこずが少なくなりたす。 Safari6.0.2およびFirefoxでテスト枈み。

1.4.0のマスタヌで修正

height: ~"calc(100% - 50px)";

ただ生成したす

height: calc(50%);

私のため。 私が欲しい

height: calc(100% - 50px);

さらに、厳密な蚈算がon蚭定されおいおも、 height: calc(50%);が生成されたす。

@OliverJAsh 1.7.0未満では結果を再珟できたせん゚スケヌプされた倀ず--strict-math:on䞡方が期埅どおりに機胜したす...䜿甚するコンパむラ/環境/スクリプトの詳现を教えおください。 このような誀った結果に぀ながる可胜性のあるBootstrapビルドスクリプトの問題があった堎合に備えおhttps//github.com/twbs/bootstrap/issues/13604、おそらくこれもあなたのケヌスですか

私は1.6.3でこの問題を抱えおいたした䜕らかの理由で、1.7.xにアップグレヌドするずWinLESSがコンパむル時にバヌフィングするので、今のずころ1.6.xに固執しおいたす

私のクむックフィックスは、次のような方皋匏の䞀郚を゚スケヌプするこずでした。

height: calc(~"100%" - unit(<strong i="7">@var</strong>, px));

これは、 <strong i="10">@var</strong>: 50などの倉数でも機胜したす。 たたは、 calc(~"100% - 50px");ように蚈算党䜓を゚スケヌプするこずもできたす

@twiginteractive --strict-mathオプションoff デフォルト蚭定で゚スケヌプを䜿甚する必芁がある堎合、それは問題ではありたせんが、予想される動䜜です。 --strict-math参照しおください。

@ Seven-phases-maxうヌん-ドキュメントによるず、SMがオフデフォルトの堎合、これは正しく解析される必芁がありたす぀たり、倉曎されたせん。
height: calc(100% - 10px);

しかし、そうではありたせん。 出力CSSはheight: calc(90%); 、これは望たしい結果ではありたせん。 たぶんこれは1.7で修正されおいたすが、私が蚀っおいるように、WinLESSコンパむルを壊しおいる原因を理解するたで、今はそのバヌゞョンを䜿甚できたせん。

「正しく凊理されたす」ず曞かれおいるずきにドキュメントを読み間違えない限り... LESSは100の倀を知るこずができなかったので、「100-10px」で数孊的な蚈算を行うべきではありたせん

@twiginteractive

ドキュメントによるず、SMがオフデフォルトの堎合、これは正しく解析されるはずです぀たり、倉曎されおいたせん

いや、蚀葉があるcurrentlyたせんcorrectly ぀たり、 "珟圚processed_ _beたす"。

@ Seven-phases-maxああ-私の悪い、今は理にかなっおいる。 説明をありがずう。

高さ〜 "calc100-50px"; 私のために働いた。

これは、Less.jsがコヌドをいじり始めるずころです。

height: _calc(50%);
height: calc(100% - 50%); /* browser-native */

@stevenvachon

おそらく、v2.0には次のようにその関数にプレフィックスを付けるオプションがありたす。

これはcalcにはたったく圱響したせん。 組み蟌みのcalc関数はありたせん。Lessは、Lessのルヌルに埓っお数匏を評䟡しおいるだけです。 それでおしたい。 この「混乱」を望たない堎合は、 --strict-math 。

この問題の解決策は厳密な数孊です。 そしお倚分私達はすべきです
calcを呌び出すずきに、厳密な蚈算を匷制したすか

レスの埌に神話を䜿甚するず、問題が拡倧したす。

どうしお 神話は括匧を削陀したすか 厳密な数孊は適切なスヌパヌセットを少なくしたす
cssの。

そしお倚分私達はcalcの呌び出しの時に厳密な数孊を匷制するべきですか

これに぀いおは1872で説明したしたが、「local strictmath on 」の回避策に反察する議論がいく぀かありたす。 提案された解決策ただ完党には決定されおいたせんは1880にありたす。

@stevenvachon

strictMathを䜿甚しおも、Lessがそれを無芖するように〜 "calc..."する必芁がありたす。

䟋 すなわちAスニペットどこより少ないねじ内の匏calcず--strict-math=on 。

v2プレフィックス機胜はい぀からですか 私たちはそれを決めたした、そしお私は忘れたしたか

v2プレフィックス機胜はい぀からですか 私たちはそれを決めたした、そしお私は忘れたしたか

いいえ。これはわずかに過倧評䟡されおいたず思いたすhttps://github.com/less/less.js/issues/2102#issuecomment-50286985 。

はい、申し蚳ありたせんが、「ぞのオプション」ではなく、「オプションを提䟛するプラグむンを䜜成する機胜」です。 calc() ~""を䜿甚する堎合ず䜿甚しない堎合で、コヌドを再床テストする必芁がありたす。 私はしばらく前に間違えられお、その誀解で前進し続けたに違いありたせん。 今すぐ倉曎する必芁のある叀いコヌドがいく぀かありたす。

widthず組み合わせお䜿甚​​するず、 calc䜕か奇劙なこずが起こっおいるこずに気づきたした。 簡単にするために、すべおをcodepenに入れたした http //codepen.io/anon/pen/OVpJvP

@alenb

では、䜕がおかしいのでしょうか。 あなたのcodepenのコヌドは期埅通りにコンパむルされおいたす...

@ seven-phases-max

コンパむルされおいたすが、期埅されたものではありたせん。 CSSコヌドをもう少し詳しく確認しおください。

3列で完党に䌞びるはずなのに、ただ右端に隙間があるので䞍思議です。 最初の2列は33.33マむナス20pxで、最埌の列は33.33である必芁がありたす。 最初の2列のパディング右は20pxですが、右端に明らかにギャップがあるため、これは反映されおいたせん。

私は昚倜それでもっず遊んだし、マヌゞンパディングの代わりに右がトリックを行い、問題を解決したす。

@alenb

コンパむルされおいたすが、期埅されたものではありたせん。 CSSコヌドをもう少し詳しく確認しおください。

確かに、私はしたした。 したがっお、䜕か別のこずを期埅する堎合は、指定しおください。

最初の2列には20pxのパディング暩がありたすが、これは反映されおいたせん

paddingは幅にたったく圱響したせん特定の[ box-sizing ]https://developer.mozilla.org/en-US/docs/Web/CSS/box-sizingを蚭定しない限り )), consult [CSS specs](http://www.w3.org/TR/REC-CSS2/box.html). So you simply get : 33-20px+33-20px+ 33= 99-40px -> 40px`予想通りのギャップ。

いずれにせよ、これはCSSのみに関連しおおり、Lessがcalcコンパむルする方法ずは䜕の関係もありたせん。 codepenコヌドの「viewcompiled」ボタンをクリックするず、 calcステヌトメントがLessによっお指定したものに正確にコンパむルされおいるこずがわかりたす。

@ seven-phases-max

私はcodepenがこれを明らかにするだろうず思っおいたでしょうが、たったく問題はありたせん。

情報をありがずう

今日でも、デフォルトのlessのむンストヌルnpmを䜿甚では機胜したせん。

私は䜿甚しなければなりたせんでした
min-height: ~"calc(100% - 262px)"; //calc(100% - 262px);

バグは「クロヌズ」ずマヌクされおいるため、正垞かどうかはわかりたせんが、お知らせしたかっただけです。

@RenaudParis --strict-math

さお、私はそれを詊しおみたす、ありがずう しかし、それが
ディフォルト 意倖なので、知らない時は
パラメヌタ。

ずにかくありがずう

Leven。 8avr。 20時48分、マックス・ミハむロフà2016 [email protected] A
écrit

@RenaudParis https://github.com/RenaudParis --strict-math
http://lesscss.org/usage/#command -line-usage-strict-math

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信するか、GitHubで衚瀺しおください
https://github.com/less/less.js/issues/974#issuecomment -207553212

しかし、それがデフォルトである方が良いのではないでしょうか

これをデフォルトにするず、既存のLessコヌドベヌスの倚くが壊れたす。 か぀お〜 v1.4.0 実際にデフォルトにする詊みがありたしたが、レガシヌの䞋䜍互換性のために逆になりたした...新しい、邪魔にならない方法が1880で開発されたしたしかしただ実装されおいたせん。

さお、私にそれを説明するために時間を割いおくれおありがずうマックス

ルサム。 9avr。 2016幎13時46、マックス・ミハむロフ[email protected] A
écrit

しかし、それが
ディフォルト

これをデフォルトにするず、既存のLessコヌドベヌスの倚くが壊れたす。 䞀床
〜v1.4.0で実際にデフォルトにする詊みがありたしたが、
次に、レガシヌの䞋䜍互換性のために逆になりたす...新しい、
邪魔にならない方法が1880で開発されたした
https://github.com/less/less.js/issues/1880 ただし、実装されおいたせん
ただ。

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信するか、GitHubで衚瀺しおください
https://github.com/less/less.js/issues/974#issuecomment -207776654

私はこれを解決したした

.calc(<strong i="6">@prop</strong>, @val) {
    @{prop}: ~"calc(~'@{val}')";
    @{prop}: ~"-moz-calc(~'@{val}')";
    @{prop}: ~"-webkit-calc(~'@{val}')";
    @{prop}: ~"-o-calc(~'@{val}');"
}
.calc(width, "80% - 36px");

command lineを䜿甚するず、それは正しいです。 less-loaderが正しくありたせん。 だから私はstackoverflowでこの解決策を芋぀けたした

私はそれを私のコヌドにコピヌしたす、悲しいこずにそれも正しくありたせん。 だから私は䜕かを倉曎したした。 できたす

残念ながら、コマンドラむンは正しくありたせん!!😂😂😂

この問題が解決された理由がわかりたせん。 LessがネむティブCSSの動䜜を倉曎するこずは意味がありたせん。

...少ないずネむティブCSSの動䜜が倉わりたす。

そうではありたせん。 --strict-math=on蚭定するだけです --strict-math=offに応じお、膚倧な量のLessプロゞェクトず互換性があるため、デフォルトでは有効になっおいたせん。たた、1880で説明したいく぀かの考慮事項もありたす。

UIkit 3テヌマでは、これをmy_theme.lessたす

height: ~"calc(100vh - 20px)";

そしおそれは機胜したす。

* .lessファむルhttps://github.com/less/less.js/issues/974#issuecomment-9229470に曞き蟌むずきに機胜したした

@lukeapageに感謝し

こんにちは@mqliutiecalcのmixin提案を远加しおくれおありがずう、しかし、コンパむルを壊しおいたあなたのMixinに䜙分な〜がありたす

ミックスむンは

.calc(<strong i="8">@prop</strong>, @val) {
    @{prop}: ~"-webkit-calc('@{val}')";
    @{prop}: ~"-moz-calc('@{val}')";
    @{prop}: ~"calc('@{val}')";
}

次のように入力したす。
.calcwidth、 "100-60px";

次のように出力したす。
幅calc100-60px;

なぜこの問題は解決されたのですか 修正されおいたせん。

calc(50% - 20px)を曞いおも、ただcalc(30%)を受け取っおいたす。 これは誰もが望んでいるこずではあり間違っおいるずいう事実は別ずしお、100の信頌性同じ単䜍などで蚈算できない限り、calcにそのたたにしおおく必芁がありたす。 LESS2.7.3を䜿甚しおいたす。

この号を再床開いおください。

@thany
これらのコメントを参照しおください。数孊凊理のデフォルト蚭定は履歎の副産物であり、デフォルト蚭定はい぀でも倉曎できたすが、これが正確に問題ではないこずを説明しおいたす。
https://github.com/less/less.js/issues/974#issuecomment -207553212
https://github.com/less/less.js/issues/974#issuecomment -207776654

@jonjohnjohnsonそれは問題を再び述べおいるだけです。 strictモヌドで修正された堎合ただ詊しおいたせんが、バグを回避するためにすべおの皮類のデフォルト以倖のフラグを有効にする必芁はありたせん、デフォルトでオンになっおいるはずです。

どのように蚀っおも、この問題はいかなる定矩によっおも修正されおいたせん。

@thany私は、開発者が問題ではないず刀断したこずを理解できるように手助けしようずしおいたした。 これらのコメントは、問題を蚀い換えるだけでなく、問題に察する開発者のスタンスを説明しおいたす。 幞運を。

@thany

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

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

なぜこの問題は解決されたのですか

デフォルトの動䜜を改善する方法の最新の議論がここにあるからです。

@thany @

 width: 15%;
 height: ~"calc(width)";

高さ=幅の䜜り方

@ xiaomizhou66
それはLESSやこの問題ずは䜕の関係もありたせん。 それは玔粋にCSSの質問です。 「csskeepaspect」のようなものを怜玢しおください。いく぀かの答えが芋぀かりたす。

だからこれはただ壊れおいたす。 calc100vh-138pxは-38pxになりたす。

@willatathena

Less 3.xでこの問題が発生した堎合は、別のバグレポヌトを䜜成しおください。
以前のLessバヌゞョンでは、これはデフォルトで予期される動䜜です䞊蚘の投皿を読んで、凊理方法を確認しおください。

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