如何在 var() 中设置动态 属性 名称

How to set a dynamic property name in var()

我正在尝试使用基于动态值的自定义属性,例如 attr()

例如,在下面的代码中,我尝试根据当前元素的 id 属性访问两个自定义属性。

:root{
  --app-foo: 'Hello';
  --app-bar: 'World';
  }
div::after{
/* expected :
            'Hello' for #foo
            'World' for #bar    */
  content:  var('--app-'attr(id));
  }
<div id="foo"></div>
<div id="bar"></div>

但显然失败了

有什么方法可以实现吗?

grammar 不允许 var() 表达式的第一个参数只能是硬编码的单个自定义 属性 名称。这意味着您不能选择在使用 CSS 的 var() 表达式中引用哪个自定义 属性,因为它不接受字符串(或返回字符串的 attr() 表达式) 用于 属性 名称。您需要使用 JS 设置包含 var() 表达式的值。