使用带有 Calc() 的 CSS 变量在第二个参数时不起作用

Posted

技术标签:

【中文标题】使用带有 Calc() 的 CSS 变量在第二个参数时不起作用【英文标题】:Using CSS Variables with Calc() not working when 2nd parameter 【发布时间】:2019-05-08 08:32:17 【问题描述】:

我是使用 calc() 的 CSS 变量的新手,如果这很明显,请原谅我,但我正在尝试执行以下计算,但我终生无法弄清楚它为什么不起作用:

$h2-font-size: 21px;

--padding-top: calc(#$h2-font-size/3);
--padding-bottom: calc(#$h2-font-size/var(--padding-top));

padding-top: var(--padding-top);
padding-bottom: var(--padding-bottom);

第一部分计算 OK(即 --padding-top: calc(#$h2-font-size/3);)正确计算为 7 并将 OK 填充到 padding-top: 值中。

但是,padding-bottom: 值计算为0

知道我哪里出错了吗?

最初我想知道是不是因为我使用了sass 变量,但如果这是我预计--padding-top: 会失败的问题......但它没有。

我注意到,如果我不将 px 值添加到字体大小,并将字体大小放在 CSS 变量之后,那么我确实会返回一个值(尽管我需要的数字错误):

--padding-bottom: calc(var(--padding-top)/21); = 0.3333333

但是,如果我尝试交换顺序以给我正确的计算,我会得到0--padding-bottom: calc(21/var(--padding-top));

我知道我还有很多东西要学,但我希望有人能帮助我朝着正确的方向前进!

谢谢

【问题讨论】:

留下评论,以防有人因为与我相同的问题来到这里(标题仍然适用),我设置--my-var: 0稍后通过JS更改值。然后我尝试减去它:calc(-100px - var(--my-var)),但在这种情况下,它明确需要--my-var: 0px 的单位。 calc(#$a - #$b); 会工作吗? 【参考方案1】:

可以使用嵌套计算 (https://developer.mozilla.org/en-US/docs/Web/CSS/calc#Nested_calc()_with_CSS_Variables),但您的计算是以 px 单位除以 px 单位,这是无效的操作,使用 calc 和除法时的第二个参数必须是数字。使用乘法运算符时也是如此,例如,您不能使用 10px * 10px,但可以使用 10 * 10px 或 10px * 10 。所以我想说看看你的用例,使用两个 ScSS / Sass 变量可能会更好。

请看这支笔上的例子: https://codepen.io/ypoulakas/pen/rQXyZr

$h2fontsize: 21;

$paddingTop: $h2fontsize / 3;

$paddingBottom: $h2fontsize / $paddingTop;

body 
--padding-top: #$paddingToppx;  
--padding-bottom: #$paddingBottompx;
--margin-top: calc( var( --padding-top ) * 4 );
--margin-left: calc( ( var( --margin-top ) ) / 2 ) ;
  background-color: pink;


.test 
  padding-top: var(--padding-top);
  padding-bottom: var(--padding-bottom);
  background-color:red;
  margin-top: var(--margin-top);
  margin-left: var(--margin-left);

这两个 Sass 变量用于根据 h2 字体大小变量控制填充顶部和底部。查看您的公式,尽管底部填充始终为 3 。

作为您示例的扩展部分,我设置顶部并让边距基于 css 变量而不是 Sass 变量。如果您看到左边距设置为 calc (200px / 10px) 则未设置边距,但如果您删除 10 上的 px,左边距将正确设置。

【讨论】:

但是你的计算是以 px 单位除以 px 单位留下一个整数 --> 它不会留下整数它只是一个无效的操作(不是允许) 是的,我同意,我试图解释为什么可能不允许该操作的上下文。将根据您的反馈更新答案。 @Kessa 请将问题标记为已回答,如果它最终对您有所帮助:)

以上是关于使用带有 Calc() 的 CSS 变量在第二个参数时不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何在第二个 Tailwind CSS 网格列中左对齐内容,使其在所有屏幕尺寸下都保持与第一列之间的间隙?

如何连续响应两列?在第一个文本中,在bootstrap 4中的第二个图像中

使用带有$变量的calc()时出现意外的术语

将 id 值存储为标量变量,然后在第二个查询中使用

带有 oidc-client.js 的 Angular 应用程序需要在第二个选项卡中登录

如何在第二个 VC 中使用第一个 VC 的方法?