有没有一种方法来声明css自定义属性而不带值?[副本]

pexxcrt2  于 2023-06-25  发布在  其他
关注(0)|答案(2)|浏览(130)

此问题已在此处有答案

Unset/Delete a custom property/CSS variable(1个答案)
19天前关闭。
这篇文章是编辑并提交审查5天前.
我想创建一个组件并公开某些可以被父元素重写的属性。
我希望这些属性被 * 声明 * 在CSS类声明的顶部,这样它们就可以被快速读取,类似于我们在编程中读取函数签名的方式。
举个例子。假设我正在创建一个按钮,它有自己的颜色,但如果定义了--button-bg-color,则允许更改其背景颜色:

.my-button {
  --bg-color: blue;

  /* lots of other css... */

  /**
    * here I assume that there might be a --button-bg-color defined,
    * but I have a fallback to my own --bg-color variable
    */
  background-color: var(--button-bg-color, var(--bg-color));
}

上面代码的问题是--button-bg-color变量在样式的深层引用。
我希望我能做的是在最上面的某个地方声明,我可能想使用这个变量。这将告诉我该组件期望被覆盖。但是我需要以一种不为变量设置任何值的方式声明它。这纯粹是关于结构和意图。
像这样的?

.my-button {
  /* Ideally, declare variable without referencing any values */
  --button-bg-color; /* no value set, but this means the propery will used later on in this class declaration */

  /* Or perhaps there is something like undefined? */
  --button-bg-color: undefined;
 
  --bg-color: blue;
 
  /* the rest of the code is the same */
}
yhxst69z

yhxst69z1#

好吧,我刚刚意识到我们可以这样做:

.my-button {
  --bg-color: var(--button-bg-color, blue); /* inherit with fallback */

  /* lots of other css... */
  background-color: var(--bg-color);
}

这样也减少了重复。

xam8gpfp

xam8gpfp2#

我发现这个问题寻找的东西有点不同。我想有人会觉得有用的。如果你真的需要将一些自定义属性重置回undefined。以下是如何做到这一点:

.my-button {
  --bg-color: var(--button-bg-color, blue);
}
.theme-1 {
  --button-bg-color: red;
}
.reset-bg-color {
  --button-bg-color: initial
}

因此,当只应用.theme-1时,按钮将是红色的,但同时应用两个类会将--button-bg-color重置为undefined,并且回退为蓝色。
编辑:刚刚发现你可以使用 initial 关键字。它似乎是一样的工作。最初解决方案是将其设置为任何未定义变量。例如:var(--undefined)。

相关问题