如何访问webcomponent中的全局css变量

vxf3dgd4  于 2023-08-08  发布在  其他
关注(0)|答案(2)|浏览(138)

我正在使用vanilla webcomponents和bundle with webpack。
在我的组件css中,我用@import声明导入全局css表,例如

@import "../../style.css";

字符串
在style.css中,我定义了变量,例如

:root {--variable: rgba(236, 236, 233, 0.0);}


从我的组件中,我可以访问全局style.css中的其他css声明,但似乎不能访问变量。例如,这在组件css中对我不起作用:

background-color: var(--variable);


当试图从js访问变量时,它似乎也不起作用。

element.style.border = "2px solid var(--variable)";


这是webcomponent技术/ webpack的一个限制吗?或者有没有其他的方法来访问/定义全局css变量,这样它就可以在web组件中访问了?

rqdpfwrv

rqdpfwrv1#

好吧..问问题,启发解决方案..橡皮鸭!
我将离开这个问题,因为我无法在其他地方找到解决方案,有人可能有同样的问题。
我没有技术上的解释(欢迎任何人详细说明),但是在全局样式表中定义用于访问webcomponents的全局变量应该在:host伪类中,而不是在:root中作为全局属性的per the documentation
这将工作:

:host {--variable: rgba(236, 236, 233, 0.0);}

字符串
或者至少:它对我有效;)

t9eec4r0

t9eec4r02#

你能详细说明一下吗?
全局CSS中的CSS变量在整个DOM中都可用,包括shadowDOM

<style>
  :root {
    --var1: red;
  }

  body {
    --var2: gold;
  }
</style>

<my-component></my-component>

<script>
  customElements.define("my-component", class extends HTMLElement {
    constructor() {
      super()
        .attachShadow({mode: "open"})
        .innerHTML = `<style>
                      :host{
                        display:block;
                        background: var(--var1);
                        color: var(--var2);
                      }
                      </style>
                      <h1>Hello Web Component World!</h1>`;
    }
  })
</script>

字符串

相关问题