【问题标题】:Overriding CSS variables from parent component覆盖父组件的 CSS 变量
【发布时间】:2020-09-09 00:03:44
【问题描述】:

那里!

所以,我正在尝试执行以下操作:我在 AngularJs 中有一个小组件,它将呈现一个类似标签的单元。我在其中定义一般样式,例如颜色和边框。它们应该是默认值。但是,我希望外部组件能够通过更改 CSS 变量的值来覆盖它。示例如下:

tagLike.html

.tag-like-container {
  --tag-like-color: red;
  
  color: var(--tag-like-color);
 }
 <div class="tag-like-container">
    my tag
 </div>

然后,外部组件将调用它

外部组件

.outer-container {
  --tag-like-color: blue;
 }
<div class="outer-container">
  <tag-like></tag-like>
</div>

然而,--tag-like-color 的最终值是 red,但我希望它是 blue。关于如何解决这个问题的任何想法?

谢谢!

【问题讨论】:

    标签: html css angularjs


    【解决方案1】:

    问题是您正在更改颜色,但您从未将实际颜色值应用于.outer-container。您需要指定 .outer-container 应该使用颜色变量。

    .outer-container {
        --tag-like-color: blue;
        color: var(--tag-like-color);
     }
    

    【讨论】:

    • 但在 tagLike 组件内部,我明确表示 color: var(--tag-like-color...我希望 tagLike 组件外部的语句覆盖其中的语句。我认为这实际上是不可能的......
    • 我找到了一种方法,方法是为 var 函数设置一个默认值,例如 color: var(--tag-like-color, red),但这并不是我想要的,因为我正在寻找在内部组件的容器......
    • 这是由于 CSS 的层叠效应。您为外部组件定义颜色,然后在到达内部组件后更改颜色。尝试给外部组件颜色上的 !important 标志。虽然这仍然不是你真正想要的。
    【解决方案2】:

    找到了解决办法!方法是使用2个变量,像这样:

    外部组件

    .tag-like-override {
      --tag-like-color: blue;
     }
    &lt;tag-like class="tag-like-override"&gt;&lt;/tag-like&gt;

    并且,在innerComponent中,使用var(value, fallback)模型,我们可以定义

    内部组件

    --final-tag-color: var(--tag-like-color, red);
    color: var(--final-tag-color);
    

    这样,如果颜色是由外部组件定义的,最终的值将是覆盖的那个;否则,它将是后备值,在本例中为红色。

    通过这样做,可以在组件的最顶层类上创建所有可覆盖样式的宣言,从而创建一个黑盒组件。

    感谢大家的帮助!

    【讨论】:

    • 你只需要写color: var(--tag-like-color, red),不需要额外的变量
    • 嗨,那里。所以,简单地按照你说的写会导致一些问题。例如,如果innerComponent 之外的组件声明它希望颜色为蓝色,则最终值将是innerComponent 的颜色,红色。必须使用变量才能从外部覆盖内部的内部组件。这首先是问题所在。但是感谢您的帮助,无论如何=D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    • 2020-06-14
    • 2013-10-27
    相关资源
    最近更新 更多