我知道已经有人报告了,但由于信息不足,错误已关闭。
我有以下 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);
}
使最后一行转换为width: calc(-30%);
,这显然不是我们想要的。 我尝试使用width: ~"calc(100% - @id1width)";
但它使@id1width
不被解释。
我认为 LESS 不应该使用 CSS3 为内部使用保留的东西......
它们可能被关闭为重复项..虽然我找不到关于 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 中解决
不确定这是否是同一个问题,但我遇到了以下问题。 请注意,这里没有不那么具体的东西,1.3.3 减少了其他有效的 CSS。
这是 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% 的高度,所以 less 解析和错误地解析 calc 表达式,而不是将它原封不动地传递给浏览器。 在 Safari 6.0.2 和 Firefox 中测试。
在 1.4.0 的 master 上修复
height: ~"calc(100% - 50px)";
仍然产生:
height: calc(50%);
为了我。 我想要:
height: calc(100% - 50px);
更重要的是,即使将严格的数学设置为on
,它仍然会产生height: calc(50%);
on
。
@OliverJAsh我无法使用 Less 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 关闭(默认)然后这个 _should_ 得到正确解析(即未触及)
height: calc(100% - 10px);
但事实并非如此。 输出 CSS 是height: calc(90%);
,这不是想要的结果。 也许这在 1.7 中已修复,但正如我所说,在我弄清楚是什么破坏了 WinLESS 编译之前,我现在无法使用该版本。
(除非我误读了文档,因为它说“将被正确处理”...... LESS 无法知道 100% 的值,所以它不应该对“100% - 10px”进行数学计算)
@twiginteractive
根据文档,在关闭 SM(默认)的情况下,这应该被正确解析(即未触及)
不,那里的词是currently
不是correctly
(即“目前将_被处理_”)。
@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
。
Ps 这个问题的解决方案是严格的数学。 也许我们应该
在调用 calc 时强制执行严格的数学运算?
在 Less 之后使用 Myth 时,问题会扩大。
为什么? 神话会删除括号吗? 严格的数学使得不太合适的超集
css的。
也许我们应该在调用 calc 时强制使用严格的数学?
我们已经在 #1872 中讨论过这个问题,并且有一些反对“local strict- math:on ”解决方法的论点。 建议的解决方案(尚未完全确定)在 #1880 中。
@stevenvachon
即使使用strictMath,我们也需要~"calc(...)" 以便Less 忽略它。
例子? 即一个片段,其中 Less 将calc
内的表达式与--strict-math=on
拧紧。
从什么时候开始 v2 前缀起作用? 是我们决定了而我忘记了吗?
从什么时候开始 v2 前缀起作用? 是我们决定了而我忘记了吗?
不。我想这只是稍微高估了https://github.com/less/less.js/issues/2102#issuecomment -50286985。
是的,抱歉,不是“选项”,而是“编写提供选项的插件的能力”。 我将不得不在 前段时间我一定是弄错了,只是带着那个误会继续前进。 我有一些较旧的代码,我现在必须对其进行修改。calc()
上使用和不使用~""
再次测试一些代码。
当与width
结合使用时,我注意到calc
发生了一些奇怪的事情。 我把它全部放进了一个代码笔中只是为了让它更容易: http ://codepen.io/anon/pen/OVpJvP
@alenb
那么有什么奇怪的呢? 您的 codepen 中的代码已按预期编译...
@七阶段最大
它已编译,但不是预期的。 更仔细地检查 CSS 代码。
这很奇怪,因为它在最右边仍然有一个间隙,即使它应该与 3 列完全伸展。 前两列应为 33.33% 减去 20px,最后一列应为 33.33%。 前 2 列的 padding-right 为 20px,但这并没有反映出来,因为最右侧显然有一个间隙。
昨晚我玩了更多,并且 margin-right 而不是 padding-right 可以解决问题并解决问题。
@alenb
它已编译,但不是预期的。 更仔细地检查 CSS 代码。
当然,我做到了。 因此,如果您期望有所不同 - 请说明。
前 2 列的 padding-right 为 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 代码中的“查看已编译”按钮,在那里您会看到您的calc
语句由 Less 编译为您指定的内容)。
@七阶段最大
我本以为 codepen 会使这一点显而易见,但完全没有问题。
谢谢(你的)信息!
今天,它仍然不适用于 less 的默认安装(使用 npm)。
我不得不使用:
min-height: ~"calc(100% - 262px)"; //calc(100% - 262px);
我不知道这是否正常,因为该错误被标记为“已关闭”,但只是想让您知道。
@RenaudParis --strict-math
好的,我试试,谢谢! 但不是更好吗?
默认? 因为它很令人惊讶,当你不知道这个的时候
范围。
不管怎么说,还是要谢谢你!
勒文。 8 月 2016 à 20:48,Max Mikhailov通知@ github.com a
评论:
@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 开发了一种更新的、侵入性较小的方法(但是它尚未实施)。
好的,谢谢你花时间向我解释,Max!
萨姆。 9 月 2016 13:46,Max Mikhailov [email protected] a
评论:
但不是更好吗?
默认?将其设为默认值会破坏许多现有的 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 行为是没有意义的。
... Less 会改变原生 CSS 行为。
它不会。 只需设置--strict-math=on
(默认情况下未启用,因为与依赖于--strict-math=off
大量 Less 项目兼容,以及 #1880 中提到的一些注意事项)。
在 *.less 文件中写入时它对我有用https://github.com/less/less.js/issues/974#issuecomment -9229470
感谢@lukeapage ! 🥇
嗨@mqliutie感谢您为 calc 添加 mixin 建议,但是,您的 Mixin 中有一个额外的 ~ 破坏了编译:
混合应该是
.calc(<strong i="8">@prop</strong>, @val) {
@{prop}: ~"-webkit-calc('@{val}')";
@{prop}: ~"-moz-calc('@{val}')";
@{prop}: ~"calc('@{val}')";
}
输入如下:
.calc(width, "100% - 60px");
输出如下:
宽度:计算(100% - 60px);
为什么这个问题被关闭了?! 它不是固定的。
当我写calc(50% - 20px)
时,我仍然收到calc(30%)
calc(50% - 20px)
。 这从来不是任何人想要的。 除了盲目地用不同的单位计算是错误的这一事实之外,它应该在 calc() 中保持原样,除非它可以以 100% 的可靠性计算(例如相同的单位)。 我正在使用 LESS 2.7.3。
请重新打开此问题。
@thany
参考这些评论,它们描述了这不是一个问题,因为处理数学的默认设置是历史的副产品,您可以随时更改默认设置。
https://github.com/less/less.js/issues/974#issuecomment -207553212
https://github.com/less/less.js/issues/974#issuecomment -207776654
@jonjohnjohnson这只是再次说明问题。 如果严格模式修复了它(还没有尝试过,应该不需要启用所有类型的非默认标志来解决错误),那么它应该在默认情况下打开。
不管你怎么说,这个问题都不是由任何定义来解决的。
@thany我只是想帮助您了解开发人员认为这不是问题。 这些评论不仅重述了问题,还描述了开发人员在该问题上的立场。 祝你好运。
@thany作为@seven-phases-max,如果你想看到这个问题的解决,贡献给#1880。 我认为解决方案就在那里,但还没有足够的社区权衡来做出准备实施的决定。 这是一个很长的话题,但这就是寻找解决方案所需要的:审查提案并以一种或另一种方式权衡。 然后:有人负责实施工作。
width: 15%;
height: ~"calc(width)";
如何使高度=宽度
@xiaomizhou66
这与 LESS 无关,也与这个问题无关。 这纯粹是一个 CSS 问题。 请搜索诸如“css keep aspect”之类的内容,您会找到一些答案。
所以这仍然是坏的。 calc(100vh - 138px) 出来 -38px。
@willatathena
如果您在 Less 3.x 中遇到此问题,请创建单独的错误报告。
对于较早的 Less 版本,这是默认情况下的预期行为(阅读上面的帖子以了解如何处理它)。
最有用的评论
它们可能被关闭为重复项..虽然我找不到关于 calc.. 见 #146 #122 和 #915
解决方法:
width: ~"calc(100% - @{id1width})";
- 注意变量周围的大括号。我们正在转向一个系统,该系统仅评估括号内的内容以解决此问题。