【问题标题】:CSS pseudo class disappears after variable value update via JSCSS伪类在通过JS更新变量值后消失
【发布时间】:2019-05-10 05:34:52
【问题描述】:

我希望能够通过 JS 更新 CSS 变量,但是当我更新变量时,CSS 伪元素会被破坏(即消失)。

这是 SCSS 代码:

:root {
  --test-thing: "";
}

.folder-1-open span::after {
    width: 90%;
    height: 85%;
    bottom: 0;
    left: 5%;
    background-color: #fff;
    z-index: 3;
    content: var(--test-thing);
}

我正在尝试这样操作变量:

const root = document.documentElement
root.style.setProperty('--test-thing', "Hello World")

上面的 CSS 在它所应用的元素(标签)上工作得非常好,基本上只是一个白色方块,但是一旦我尝试更新 CSS 变量 --test-thing 以通过 content 添加一个字符串道具,整个事情就消失了。

难道不能用伪元素或类来做到这一点吗?

通过研究 SO 上的相关帖子,我的理解是使用 CSS 变量可以实现这一点。

对于上下文,纯 CSS 交互式文件夹的I’m working off this example(当它打开时,我想动态更新内容)。

【问题讨论】:

  • 这很奇怪......伪元素完全消失了......我会试着找出原因......

标签: javascript css frontend pseudo-element css-variables


【解决方案1】:

好的,我大概知道为什么会这样了。仍然不是 100% 确定原因,但这与新值不在引号中的事实有关。只需将值放在引号中,它就可以正常工作。

const root = document.documentElement
root.style.setProperty('--test', "'Hello World'") // <-- this needs to be in quotes
:root {
  --test: "";
}

#test {
  height: 100px;
  width: 100px;
  background: #ccc;
}
#test:after {
  content: var(--test);
  min-width: 100px;
  background: #000;
  min-height: 30px;
  color: #fff;
}
<div id="test">

</div>

【讨论】:

  • 我的猜测是 setProperty 会删除引号本身——这是有道理的;毕竟,如果它只是将所有内容都保留为字符串,那么您将无法设置 px 值,例如(因为它最终会说“min-width:'100px'”而不是“min-width: 100 像素”。
  • 可能是,为什么它会完全删除伪元素,尽管看起来仍然很奇怪。可能是因为它的内容现在为空。
  • 根据this,如果将'none'指定为内容属性,则不会生成伪元素。似乎设置无效会自动评估为“无”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-03
  • 2012-08-28
  • 1970-01-01
  • 2012-04-02
相关资源
最近更新 更多