代码之家  ›  专栏  ›  技术社区  ›  Gudradain

嵌套元素交替背景色的循环css规则

  •  3
  • Gudradain  · 技术社区  · 6 年前

    我有一个动态页面,用户可以在其他div中添加任意数量的div。每个div都有一个背景色,我希望背景色每3个div重复一次。

    目前,我正在编写这样的css规则

    div {
      padding-top: 20px;
      margin-left: 10px;
    }
    
    div {
      background-color: blue;
    }
    
    div>div {
      background-color: red;
    }
    
    div>div>div {
      background-color: green;
    }
    
    div>div>div>div {
      background-color: blue;
    }
    
    div>div>div>div>div {
      background-color: red;
    }
    
    div>div>div>div>div>div {
      background-color: green;
    }
    
    div>div>div>div>div>div>div {
      background-color: blue;
    }
    
    
    /* and it continues... */
    <div>
      <div>
        <div>
          <div>
            <div>
              <div>
                <div>
    
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>

    有没有其他方法来处理CSS?

    1 回复  |  直到 5 年前
        1
  •  3
  •   Temani Afif BoltClock    6 年前

    这不是一个直接的答案,但如果您可以嵌套替代元素(例如div,section),这里有一个想法,您可以如何使用纯CSS。诀窍是使用CSS变量来控制 background-position 然后为每个子对象增加它,以便将背景移动到下一个颜色。您需要替换元素才能实现增量,使用一个元素,我们将有一个周期,它不会工作。

    :root {
     --i:1;
     --j:1;
    }
    
    div,section {
      padding-top: 20px;
      margin-left: 10px;
      background: 
        repeating-linear-gradient(to bottom, 
          blue 0, blue calc(100%/3), 
          red calc(100%/3), red calc(2*100%/3), 
          green calc(2*100%/3), green 100%);
      background-size:100% 300%;
    }
    section {
     --j:calc(var(--i) + 1);
     background-position:0 calc(var(--j) * 100%);
    }
    
    div {
     --i:calc(var(--j) + 1);
     background-position:0 calc(var(--i) * 100%);
    }
    <div>
      <section>
        <div>
          <section>
            <div>
              <section>
                <div>
    
                </div>
              </section>
            </div>
          </section>
        </div>
      </section>
    </div>