SCSS:基于 calc() 的反转/否定变量

Mag*_*nus 5 css sass

我正在使用 SCSS 并想在顶部指定一个基于 px 和 rem 值之和的变量。

我知道不可能在 SCSS 变量中组合单位类型,所以我使用calc()

$navbar-top: calc(40px + 1 rem);
Run Code Online (Sandbox Code Playgroud)

在样式表的更下方,我想包含一个否定版本的$navbar-top.

我尝试了这两个,但没有成功:

(-$navbar-top)
-#{$navbar-top}
Run Code Online (Sandbox Code Playgroud)

知道如何否定 SCSS 变量,而不必声明新变量,或在整个 CSS 中再次编写 calc 。

谢谢。


编辑

  • 正如下面的评论中所指出的,这不是Sass 负变量值的重复吗?
  • 这个问题是关于用 calc() 否定一个变量集,这与上面的 SO 帖子无关。我已经注意到上面那个问题中提出的两种解决方案。在这种特殊情况下,它们都不起作用。

编辑 2:基于下面 TEMANI 的回答的 SCSS 解决方案

在顶部声明必要的变量,包括“否定”(-1):

$navbar-top: calc(40px + 1rem);
$neg: -1;
Run Code Online (Sandbox Code Playgroud)

然后,该变量可以在整个过程中使用(否定或不否定),如下所示:

/* Non-negated */
margin: $navbar-top 0 0;

/* Negated */
margin: calc(#{$neg} * #{$navbar-top}) 0 0;
Run Code Online (Sandbox Code Playgroud)

上面的否定版本将编译为以下 CSS:

margin: calc(-1 * calc(40px + 1rem)) 0 0;
Run Code Online (Sandbox Code Playgroud)

Tem*_*fif 3

由于calc不是通常的值,因此您不能简单地-在其上附加符号来获取负值。

一个想法是考虑另一个参数来控制符号。这是一个使用纯 CSS 和 CSS 变量的想法,而不需要另一个calc()

.box {
  margin-top: calc( var(--s,1)*(40px + 1rem));
  height:100px;
  background:rgba(255,0,0,0.5);
}
Run Code Online (Sandbox Code Playgroud)
<div class="box"></div>
<div class="box" style="--s:-1"></div>
Run Code Online (Sandbox Code Playgroud)

您可以使用类定义负值

.box {
  margin-top: calc( var(--s,1)*(40px + 1rem));
  height:100px;
  background:rgba(255,0,0,0.5);
}
.neg {
  --s:-1;
}
Run Code Online (Sandbox Code Playgroud)
<div class="box"></div>
<div class="box neg"></div>
Run Code Online (Sandbox Code Playgroud)

更新

您还可以考虑使用变量的表达式:

:root {
  --exp:(40px + 1rem);
}

.box {
  margin-top: calc( var(--s,1)*var(--exp));
  height:100px;
  background:rgba(255,0,0,0.5);
}
Run Code Online (Sandbox Code Playgroud)
<div class="box"></div>
<div class="box" style="--s:-1"></div>
Run Code Online (Sandbox Code Playgroud)