1. ::part 与 CSS Variables 在 Shadow DOM 外部样式穿透的工程价值
请说明 ::part 与 CSS Variables 在 Shadow DOM 外部样式穿透中的机制,以及它们的工程价值?
- ::part 暴露内部命名部件供外部定制
- CSS 变量沿继承链穿透 Shadow 边界
- 两者在主题系统的协作与取舍
::part 与 CSS 变量是 Shadow DOM 提供外部样式穿透的两大受控通道。::part(name) 允许外部精确选择组件内部用 part 属性标记的命名部件并覆盖样式,是"结构性"定制接口;CSS 变量(自定义属性)沿继承链从宿主穿透到影子内部,组件内部通过 var() 引用,实现"变量化"的主题定制。工程价值:组件库用 CSS 变量定义主题 tokens(颜色、间距、圆角),用户只需在宿主上覆盖变量即可整体换肤;结合 ::part 做细粒度结构定制。二者互补:CSS 变量适合全局主题与批量定制,::part 适合单部件精确覆盖,都保持封装边界不破坏内部结构。
这是封装与定制的平衡设计。CSS 变量是"价值观"定制、::part 是"结构定位"定制,用户无需深入组件内部即可实现主题与局部覆盖,是设计系统主题化的支柱。
/* 组件内部 */
:host { --accent: #0066ff; }
button { background: var(--accent); }
/* 外部 */
my-card { --accent: #ff6600; }
my-card::part(header) { padding: 12px; }