禁用LESS-CSS覆盖calc()

AJS*_*acy 427 css css3 less css-calc

现在我在我的LESS代码中尝试在CSS3中执行此操作:

width: calc(100% - 200px);
Run Code Online (Sandbox Code Playgroud)

但是,当LESS编译时,它输出:

width: calc(-100%);
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉LESS不要以这种方式编译并正常输出?

Fab*_*tté 781

使用转义字符串(也称为转义值):

width: ~"calc(100% - 200px)";
Run Code Online (Sandbox Code Playgroud)

此外,如果您需要将Less math与转义字符串混合使用:

width: calc(~"100% - 15rem +" (10px+5px) ~"+ 2em");
Run Code Online (Sandbox Code Playgroud)

编译为:

width: calc(100% - 15rem + 15px + 2em);
Run Code Online (Sandbox Code Playgroud)

这可以在默认情况下使用空格连接值(转义字符串和数学结果).

  • 谢谢你的回答!奇迹般有效! (10认同)
  • +1谢谢,它可以解决问题.但我不禁感觉应该有一个更简单的方法来做到这一点...... (7认同)
  • @ gion_13你实际上是对的,你可以打开[Strict Math设置](http://lesscss.org/usage/#command-line-usage-strict-math).是时候稍微改善这个答案了.`=]` (2认同)

Fab*_*tté 63

除了使用我的其他答案中描述的转义值之外,还可以通过启用严格数学设置来解决此问题.

通过严格的数学运算,只会处理不必要的括号内的数学,因此您的代码:

width: calc(100% - 200px);
Run Code Online (Sandbox Code Playgroud)

在启用严格数学选项的情况下可以正常工作.

请注意,严格数学应用于全局,而不仅仅是内部calc().这意味着,如果你有:

font-size: 12px + 2px;
Run Code Online (Sandbox Code Playgroud)

Less将不再处理数学 - 它将输出font-size: 12px + 2px显然是无效的CSS.您必须包含应由Less in(以前不必要的)括号处理的所有数学:

font-size: (12px + 2px);
Run Code Online (Sandbox Code Playgroud)

在开始一个新项目时,Strict Math是一个很好的选择,否则你可能需要重写代码库的一部分.对于最常见的用例,另一个答案中描述的转义字符串方法更合适.

  • 这值得更多关注.. (7认同)
  • 要在gulp中启用严格的数学运算,请传递以下选项:`less({strictMath:true})` (5认同)

Pat*_*ley 23

这是一个跨浏览器的mixin,用于将CSS calc与任何属性一起使用:

.calc(@prop; @val) {
  @{prop}: calc(~'@{val}');
  @{prop}: -moz-calc(~'@{val}');
  @{prop}: -webkit-calc(~'@{val}');
  @{prop}: -o-calc(~'@{val}');
}
Run Code Online (Sandbox Code Playgroud)

用法示例:

.calc(width; "100% - 200px");
Run Code Online (Sandbox Code Playgroud)

以及输出的CSS:

width: calc(100% - 200px);
width: -moz-calc(100% - 200px);
width: -webkit-calc(100% - 200px);
width: -o-calc(100% - 200px);
Run Code Online (Sandbox Code Playgroud)

这个例子的代码:http://codepen.io/patrickberkeley/pen/zobdp


Ach*_*ner 13

带变量的转义字符串示例:

@some-variable-height: 10px;

...

div {
    height: ~"calc(100vh - "@some-variable-height~")";
}
Run Code Online (Sandbox Code Playgroud)

编译成

div {
    height: calc(100vh - 10px );
}
Run Code Online (Sandbox Code Playgroud)


Seb*_*ber 6

Fabricio的解决方案效果很好.

一个非常常见的calc用例是添加100%宽度并在元素周围添加一些边距.

人们可以这样做:

@someMarginVariable: 15px;

margin: @someMarginVariable;
width: calc(~"100% - "@someMarginVariable*2);
width: -moz-calc(~"100% - "@someMarginVariable*2);
width: -webkit-calc(~"100% - "@someMarginVariable*2);
width: -o-calc(~"100% - "@someMarginVariable*2);
Run Code Online (Sandbox Code Playgroud)

或者可以使用mixin:

.fullWidthMinusMarginPaddingMixin(@marginSize,@paddingSize) {
  @minusValue: (@marginSize+@paddingSize)*2;
  padding: @paddingSize;
  margin: @marginSize;
  width: calc(~"100% - "@minusValue);
  width: -moz-calc(~"100% - "@minusValue);
  width: -webkit-calc(~"100% - "@minusValue);
  width: -o-calc(~"100% - "@minusValue);
}
Run Code Online (Sandbox Code Playgroud)