css :根变量在:before元素上不可用

ogsagwnx  于 2023-02-26  发布在  其他
关注(0)|答案(3)|浏览(251)

我得到了很多css变量赋值给:root,但是这些在我的:before元素中是无法访问的。我在网上找不到任何关于这个的东西。
在检查:before元素的父元素时,我在google dev tools的样式面板底部看到了所有的:root变量,见下面的截图。
我的CSS

&__meta {
    padding: 10px 0;
    margin-top: 5px;
    margin-bottom: 5px;
    font-size: 14px;
    color: var(--text-color);

    &-author {
        margin-right: 15px;
    }
    &-primary-cat:before {
        content: '';
        display: inline-block;
        width: 5px;
        height: 5px;
        background-color: var(--text-color);
        border-radius: 50%;
        vertical-align: middle;
        margin-right: 5px;
    }
}

chrome开发工具父css

chrome devtools:before css -除背景色之外的所有样式都应用于:before元素

mtb9vblg

mtb9vblg1#

类似问题的答案可能对https://stackoverflow.com/a/63322762/561959有所帮助
伪元素并不从:root继承变量,听起来你需要把它们添加到定义它们的列表中,例如:

:root,
::after,
::before {
    /* Your variables*/
}
u4vypkhs

u4vypkhs2#

定义两次

现在,据我所知,你必须定义他们两次,不幸的是,绝对可以有一个最佳实践,但我找不到一个,所以这个设置为我工作。
我将我的css变量/自定义属性添加到特定的选择器中,这样它们就可以在每个元素选择器中进一步修改,同时检查每个元素并让您的css变量/自定义属性与您的选择器一起显示也会稍微容易一些。
使用像sass/scss这样的预处理器会有很大帮助。我对这种技术的使用太长了,无法全部展示,但这就是方法。

// Make a mixin so its easy to repeat
// css vars/ custom properties
@mixin css-vars($var){
   --var-bg: #{$var};
}

// Defined before using @include
$var: #fff;

.example {

  // vars will be available to children of .example
  @include css-vars($var);

  // Unfortunately you need to now specify
  // your targeted ::pseudo elements and include
  &::before,
  &::after {
    @include css-vars($var);
    background: var(--var-bg);
  }

}

它将输出:

.example {
  --var-bg: #fff;
}
.example::before, .example::after {
  --var-bg: #fff;
  background: var(--var-bg);
}
eimct9ow

eimct9ow3#

它们是可访问的,但是为了在伪元素上看到它们,您必须将它们应用到伪元素上。
请参见文档中的如何用途:根变量:https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_custom_properties
下面是如何使用伪元素:https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements
您可以在代码上尝试类似这样的操作:

a::before {
   content: "";
   width: 50px;
   height: 50px;
   display: block;
   background-color: var(--site-primary-color);
}

相关问题