【问题标题】:How to set a dynamic property name in var()如何在 var() 中设置动态属性名称
【发布时间】:2018-05-22 07:36:00
【问题描述】:

我正在尝试使用基于动态值的自定义属性,例如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>

但显然失败了。

有什么方法可以实现吗?

【问题讨论】:

  • JS 无法更改 CSS。您可以更改样式但不能更改 CSS
  • @Rajesh JS 无法更改 CSS。你确定吗?这是什么? developer.mozilla.org/en-US/docs/Web/CSS/…
  • Kaiido 我喜欢用buttons的id属性来补全css变量的名字,来获取合适的css变量插入到button的::after内容中。
  • @zer00ne 对不起,如果我不知道,但我可以document.&lt;styleSheets|someOtherProperty&gt;.selector.someCssProperty = someValue吗?
  • @Rajesh document.styleSheets[0].insertRule("ul li::before {content:'\1f4a5'}", 0);

标签: javascript html css dynamic css-variables


【解决方案1】:

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

【讨论】:

  • 实际上,我不确定问题出在自定义属性的命名上,而不是在var() 表达式中无法使用字符串。
  • @Kaiido:也许我应该删除这个答案并在不清楚的情况下关闭这个问题。有很多代码,几乎没有任何简单的英文解释,所以很难对他们实际尝试做的事情做出正面或反面。 (但如果提问者无法用简单的英语表达他们的目标怎么办?)
  • 不,我认为你已经接近他们想要的(IMK 是不可能的)。看看最后一个 sn-p:,他们尝试了' ('var('--'attr(id))')';,就像它是'('var(--app-id)')',但他们的版本实际上等同于'('var('--app-id')')',这是无效的。
  • @Kaiido:好的,我想我明白了。他们只想做一个动态的 var() 引用。自定义属性本身仍然可以进行硬编码,但他们希望在运行时选择要引用的自定义属性。如果是这样的话,我会编辑我的答案。
  • @Kaiido 是的,你理解我的查询是正确的。
猜你喜欢
  • 2014-03-10
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-15
  • 2015-01-30
相关资源
最近更新 更多