对于html:
body > div {
--x: 1;
}
div {
--x: calc(var(--x) + 1);
}
有没有办法创建一个使用其父值的递归变量:
body > div {
--is-even: 0;
--is-odd: 1;
}
div {
--is-even: var(--is-odd);
--is-odd: var(--is-even);
}
上述内容无效,因为css variables cannot have dependency cycles。另一个无效的例子:
preventDefault()
是否有任何间接方式在css中表达这样的递归变量?
答案 0 :(得分:5)
您可以使用两个CSS变量来模拟递归行为并避免循环依赖。
以下是一个例子:
body {
--x: 10;
}
.y {
--y: calc(var(--x) + 1);
}
.x{
--x: calc(var(--y) + 1);
}
.result {
border-right:calc(1px * var(--y)) solid red;
border-left:calc(1px * var(--x)) solid green;
height:50px;
}

<body>
<div class="y">
<div class="x">
<div class="y">
<div class="x">
<div class="y">
<div class="x">
<div class="y result">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
&#13;
如果您检查元素,您将找到最后一个元素,即border-right等于17px(10 + 7
)并且border-left等于16px(10 + 6
)
这个想法非常适合具有2级结构的元素,如列表:
body {
--x: 30;
}
ul {
font-size: calc(var(--x) * 1px);
--y: calc(var(--x) - 8);
}
li {
--x: calc(var(--y));
}
&#13;
<ul>level A
<li>item 1
</li>
<li>item 2
<ul>level B
<li>item 2.1
<ul>level C
<li>item 2.1.1
</li>
<li>item 2.1.2
</li>
</ul>
</li>
<li>item 2.2
</li>
</ul>
</li>
</ul>
&#13;