我最近一直在学习关于定制元素和LIT js的知识.我正在try 使用::part伪 Select 器设置我的组件的样式.

这在 firefox 上可以用,但在Chrome上似乎不行.

据我所知,这应该在两者中都得到支持.我已经能够在代码笔(链接如下)中复制该问题.

我应该期待这段代码在Chrome中呈现一个红色方块吗?

import * as lit from "https://cdn.skypack.dev/lit@2.5.0";

class TTest extends lit.LitElement {
  static styles =  lit.css`
    ::part(test) {
      display: block;
      color: red;
      background-color: red;
      height: 200px;
      width: 200px;
    }
  `
  
  render() {
    return lit.html`
      <div part="test">
      
      </div>
    `
  }
}

customElements.define('t-test', TTest);

Firefox版本:108.0.1 (64-bit)
Chrome版本:108.0.5359.124 (Official Build) (64-bit)
操作系统:Arch Linux x86_64 6.1.1-arch1-1

Code Pen.Code Pen ||| Can I Use.

推荐答案

看起来你发现了一个窃听器

::part, a set of pseudo-elements that allow you to style inside a shadow tree,
from outside of that shadow tree.

firefox 似乎允许从insidethe shadowTree本身进行样式设置

此本地代码在浏览器中具有不同的输出:

<style>
    wc-container ::part(redpart) {
      color: yellow;
      background-color: red;
    }
</style>

<wc-container>
  <wc-part-test> red part </wc-part-test>
</wc-container>

<wc-part-test> NOT red part </wc-part-test>

<script>
  customElements.define('wc-container', class extends HTMLElement {
  constructor(){
     super().attachShadow({mode:"open"}).innerHTML=`<slot/>`;
  }});
  customElements.define('wc-part-test', class extends HTMLElement {
  constructor(){
     super()
      .attachShadow({mode:"open"})
      .innerHTML = 
        `<style>::part(redpart){ font:2em Arial }</style>` + 
        `Hello <span part="redpart"><slot></slot></span> Web Component`;
  }});
</script>

firefox

因为<style>在shadowRoot内,所以font样式can可以在without ::part中完成

chromium

狩猎

请共享指向您的屏幕截图的链接;或编辑此答案

Conclusion

I can see use-cases for both behaviors, wonder what is used in the world already
I use ::part the Chrome way

Css相关问答推荐

隐藏div后缺少div的InnerHTML

需要Angular material 下拉面板有向下和向上箭头按钮

当面板以Angular 上升时如何定位下拉面板

使用SVG以竖排书写模式创建渐变文本时,文本显示异常

导航栏没有使用nextui获取页面的全部宽度

Firefox中的解决方法:has(不使用JavaScript)

你能混合固定/相对定位吗?

CSS 中的 :not(style) ~ :not(style) 是什么?

动态覆盖 Vuetify 类

内部和外部 div 之间的像素大小的间隙

通过css修改样式shadowroot元素

将复选框对齐到中心

Twitter Bootstrap:进度条居中文本

Bootstrap 3 - 在每个网格列之后打印布局和中断

在 css 中使用 FontAwesome 或 Glyphicons :before

Angular 5 在某些类中添加了ng-star-inserted - 那是什么?

如何动态生成用逗号分隔的类列表?

Flexbox 代码适用于除 Safari 之外的所有浏览器.为什么?

CSS过渡自动高度不起作用

输入和文本字段中的背景 colored颜色