javascript - 当渲染根为 lightdom 时点亮的样式

标签 javascript css web-component lit

所以我有以下styles :

  static styles = [css, icons];

然后我设置了renderRoot走向光明:

protected createRenderRoot(): Element | ShadowRoot {
    return this;
}

这样样式就不会应用,我必须手动添加:

render() {
  return html`
 <style>
       ${css.cssText}
       ${icons.cssText}
 </style>

如果我删除 createRenderRoot ,样式无需设置 <style> 即可工作。标签 render功能。

谁能告诉我我做错了什么?或者为什么会发生这种情况?

最佳答案

lit 的 createRenderRoot 的默认行为是创建一个 Shadow Root,并将静态 styles 属性中设置的样式添加到该 Shadow Root。

因此,当您重写createRenderRoot以使用this作为根时(因此,根本不使用shadow DOM),您还将删除添加样式的代码也是。

这样做的主要原因是样式只有在 Shadow DOM 内部时才能确定作用域。将它们添加到不使用 Shadow DOM 的自定义元素也会使这些样式应用于与所使用的 CSS 选择器匹配的任何其他节点。

这基本上给你留下了两个选择:

  1. 继续仅使用 light DOM,并将样式移至 CSS 文件中的全局样式表。
  2. 使用影子 DOM

更多信息:https://lit.dev/docs/components/shadow-dom/#implementing-createrenderroot

关于javascript - 当渲染根为 lightdom 时点亮的样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69876073/

相关文章:

列表项 li 父节点上的 Javascript 事件处理程序

html - 为什么四个 child 不在父装修中?

javascript - CSS 3 Flexbox 模型宽度 jQuery

javascript - 如何使用 Laravel 4.1 为外部网页设置小部件

javascript - 获取数组作为原始命令行参数

javascript - 在 Razor 代码中访问 Javascript 变量

html - 如何在每次更改为不同分辨率时保持容器大小不变?

javascript - native 形式的自定义输入元素

javascript - 使用 neon-elements 对 light dom 元素进行动画处理

javascript - 自定义元素设置 : constructor vs connectedCallback