【问题标题】:CSS Variables - Swapping values?CSS 变量 - 交换值?
【发布时间】:2018-11-07 03:51:32
【问题描述】:

我对 CSS 变量有一个非常简单的问题。我想交换两个 CSS 变量,基本上是 ES6 中 [a, b] = [b, a] 的 CSS 等价物。这是一个简单的例子:

<p>White background</p>
<button>Black background</button>
<div>
  <p>Black background</p>
  <button>White background</button>
</div>
:root {
  --primary-color: #fff;
  --secondary-color: #000;
}

body {
  background-color: var(--primary-color);
}

button {
  background-color: var(--secondary-color);
}

div {
  /* i'd like to do the following: */
  --primary-color: var(--secondary-color);
  --secondary-color: var(--primary-color);

  /* so here, `--primary-color` would be `--secondary-color` from `:root`
   * and any children have these colors swapped as well
   */
  background-color: var(--primary-color);
}

但是,这会失败,因为 CSS var()s 是实时绑定。我在这里错过了什么吗?或者这是规范当前的工作方式?

【问题讨论】:

    标签: css swap css-variables


    【解决方案1】:

    您正在创建循环依赖,因为您正在使用另一个属性定义每个属性,这将不起作用。相反,您可以通过引入更多变量来尝试这样的事情:

    :root {
      --p:#fff;
      --s:#000;
      --primary-color: var(--p);
      --secondary-color: var(--s);
    }
    
    body {
      background-color: var(--primary-color);
    }
    
    button {
      background-color: var(--secondary-color);
    }
    
    div {
      /* i'd like to do the following: */
      --primary-color: var(--s);
      --secondary-color: var(--p);
      
      background-color: var(--primary-color);
    }
    <p>White background</p>
    <button>Black background</button>
    <div>
      <p>Black background</p>
      <button>White background</button>
    </div>

    【讨论】:

    • 如果我在其中嵌入另一个 div 会怎样?我希望它交换第一个 div 的颜色并将它们应用于第二个。绝对没有办法做到这一点,对吧?
    • @ArielAbreu 好吧,解决方案是简单地避免循环 :) 因为 CSS 不是 JS,这些不是相互执行的指令......这些是属性,所以如果在同一个类中你有在 2 个属性之间循环它不起作用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多