加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

html – 递归变量可以用css表示吗?

发布时间:2020-12-14 16:34:46 所属栏目:资源 来源:网络整理
导读:对于html: bodydiv div div ... /div /div/div/body 有没有办法创建一个使用其父值的递归变量: body div { --x: 1;}div { --x: calc(var(--x) + 1);} 以上是无效的,因为css variables cannot have dependency cycles.另一个无效的例子: body div { --is-e
对于html:
<body>
<div>
  <div>
    <div>
      ...
    </div>
  </div>
</div>
</body>

有没有办法创建一个使用其父值的递归变量:

body > div {
    --x: 1;
}

div {
    --x: calc(var(--x) + 1);
}

以上是无效的,因为css variables cannot have dependency cycles.另一个无效的例子:

body > div {
    --is-even: 0;
    --is-odd: 1;
}

div {
    --is-even: var(--is-odd);
    --is-odd: var(--is-even);
}

是否有任何间接方式在css中表达这样的递归变量?

解决方法

您可以使用两个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>

如果检查元素,您将找到最后一个元素,即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));
}
<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>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读