使用 attr() 更新 CSS 个变量
Updating CSS variables with attr()
为什么这行得通,并产生 :before
并显示 "changed"
:root {
--namevar: "fallback";
}
.in[name] {
--namevar: "changed";
}
.in dd:first-of-type:before {
font-weight: bold;
display: block;
content: var(--namevar);
}
但是如果改成这样,:before
就没了?
.in[name] {
--namevar: attr(name);
}
这些都不起作用:
.in dd:first-of-type:before {
content: attr(name, inherit);
}
.in[name] dd {
name: inherit;
}
HTML 看起来像:
<div class="in" name="this">
<dd>one</dd>
<dd>two</dd>
<dd>three</dd>
</div>
我在这里错过了什么?
这是因为您的 css 变量检测到最近的父变量。
您可以使用全局选择器“*”
覆盖
只需在 css
中使用
*{
--namevar: "fallback";
}
试试吧。如果有更多帮助。随时问我。
--namevar: attr(name);
的使用效果很好,但您需要了解它的工作原理。
示例:
:root {
--namevar: "fallback";
}
.in dd:before {
font-weight: bold;
content: var(--namevar);
}
.in[name] {
--namevar: attr(name);
}
<div class="in" name="this">
<dd>one</dd>
<dd name="ok ">two</dd>
<dd>three</dd>
</div>
请注意在第二种情况下我们如何显示 "Ok" 而对于其他情况什么都不显示,因为它们没有名称属性。使用 .in[name] {--namevar: attr(name);}
并不意味着获取属于 .in
的 name 属性的值并将其存储在变量中。这意味着变量的值是 attr(name)
而已。我们仅在使用变量时解析该值,在您的情况下,它在 dd
内部使用,因此我们考虑 dd
.
的属性名称(如果存在)
换句话说,您不能使用 CSS 变量来存储元素属性的值并稍后在任何子元素中使用它。您可以做的是保留您的初始示例,而不是您考虑 CSS 变量的属性,如下所示:
:root {
--namevar: "fallback";
}
.in dd:before {
font-weight: bold;
content: var(--namevar);
}
<div class="in" style="--namevar:'this '">
<dd>one</dd>
<dd name="ok">two</dd>
<dd>three</dd>
</div>
为什么这行得通,并产生 :before
并显示 "changed"
:root {
--namevar: "fallback";
}
.in[name] {
--namevar: "changed";
}
.in dd:first-of-type:before {
font-weight: bold;
display: block;
content: var(--namevar);
}
但是如果改成这样,:before
就没了?
.in[name] {
--namevar: attr(name);
}
这些都不起作用:
.in dd:first-of-type:before {
content: attr(name, inherit);
}
.in[name] dd {
name: inherit;
}
HTML 看起来像:
<div class="in" name="this">
<dd>one</dd>
<dd>two</dd>
<dd>three</dd>
</div>
我在这里错过了什么?
这是因为您的 css 变量检测到最近的父变量。 您可以使用全局选择器“*”
覆盖只需在 css
中使用*{
--namevar: "fallback";
}
试试吧。如果有更多帮助。随时问我。
--namevar: attr(name);
的使用效果很好,但您需要了解它的工作原理。
示例:
:root {
--namevar: "fallback";
}
.in dd:before {
font-weight: bold;
content: var(--namevar);
}
.in[name] {
--namevar: attr(name);
}
<div class="in" name="this">
<dd>one</dd>
<dd name="ok ">two</dd>
<dd>three</dd>
</div>
请注意在第二种情况下我们如何显示 "Ok" 而对于其他情况什么都不显示,因为它们没有名称属性。使用 .in[name] {--namevar: attr(name);}
并不意味着获取属于 .in
的 name 属性的值并将其存储在变量中。这意味着变量的值是 attr(name)
而已。我们仅在使用变量时解析该值,在您的情况下,它在 dd
内部使用,因此我们考虑 dd
.
换句话说,您不能使用 CSS 变量来存储元素属性的值并稍后在任何子元素中使用它。您可以做的是保留您的初始示例,而不是您考虑 CSS 变量的属性,如下所示:
:root {
--namevar: "fallback";
}
.in dd:before {
font-weight: bold;
content: var(--namevar);
}
<div class="in" style="--namevar:'this '">
<dd>one</dd>
<dd name="ok">two</dd>
<dd>three</dd>
</div>