无法用自己的值覆盖 CSS 变量

Sup*_*rDJ 5 css css-variables css-calc

让我们假设有以下 CSS:

.box {
  width: var(--box-size);
  height: var(--box-size);
  border: 1px solid red;
}

.box--larger {
  --box-size: 66px;
}

.box--larger1 {
  --box-size: calc(var(--box-size) + var(--box--larger));
}

.box--larger2 {
  --box-size: calc(50px + var(--box--larger));
}

:root {
  --box-size: 50px; 
  --box--larger: 16px;
}
Run Code Online (Sandbox Code Playgroud)
<div class="box">1</div>
<div class="box box--larger">2</div>
<div class="box box--larger1">3</div>
<div class="box box--larger2">4</div>
Run Code Online (Sandbox Code Playgroud)

我想知道为什么框 1 和框 2 有效而框 3 不起作用。我希望框 3 看起来与框 2 相同,但事实并非如此。我在 Chrome 中测试了 box 3 的方法,我发现var(--box-size)它没有显示值但var(--box-larger)确实返回了正确的值(16px)。

有人可以解释为什么框 3 的方法不起作用。我的意思是对我来说它看起来像有效的 CSS。

Tem*_*fif 6

正如上面所评论的,CSS 不是一种编程语言,您有一个循环依赖,想要表达具有相同属性的属性,但该属性不起作用。

参考规范

自定义属性几乎完全不计算,除了它们允许并计算 var() 函数的值。这可能会创建循环依赖,其中自定义属性使用 var() 引用自身,或者两个或多个自定义属性各自尝试相互 引用。

这种情况的常见解决方法是添加更多变量以避免任何循环依赖。

:root {
  --bs:50px;
  --bl:16px;
  --box-size:var(--bs); 
  --box--larger:var(--bl);
}

.box {
  width: var(--box-size);
  height: var(--box-size);
  border: 1px solid red;
}

.box--larger {
  --box-size: 66px;
}

.box--larger1 {
  --box-size: calc(var(--bs) + var(--bl));
}

.box--larger2 {
  --box-size: calc(50px + var(--bl));
}
Run Code Online (Sandbox Code Playgroud)
<div class="box">1</div>
<div class="box box--larger">2</div>
<div class="box box--larger1">3</div>
<div class="box box--larger2">4</div>
Run Code Online (Sandbox Code Playgroud)