You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CSS ::part伪选择器在Chrome中的兼容性问题咨询

问题:Chrome中Lit组件的::part样式不生效?

我近期正在学习自定义元素与Lit JS,尝试使用CSS ::part伪选择器为组件设置样式。该代码在Firefox中可正常显示红色方块,但在Chrome中无效。根据Can I Use的信息,二者应均支持该特性,已复现问题。请问此代码应在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

解答

你的代码在Chrome中不会显示红色方块,问题出在组件内部错误使用了::part伪选择器。

::part的设计目的是让组件外部的样式穿透Shadow DOM,选中组件内部标注了part属性的元素,它并不适合在组件自身的样式中使用。在组件内部,你应该直接选择目标元素来设置样式。

修正后的代码示例:

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

class TTest extends lit.LitElement {
  static styles =  lit.css`
    div[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);

或者更简洁地使用类选择器:

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

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

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

如果需要保留part属性供外部样式修改,外部可以这样编写样式:

t-test::part(test) {
  /* 这里可以覆盖组件内部的样式 */
}

Firefox能生效属于非标准的兼容行为,Chrome遵循规范所以不支持这种错误用法。


内容的提问来源于stack exchange,提问作者brendandeere

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 05:35:34