ข้ามไปยังเนื้อหา

การจัดสไตล์ Web Components

CSS ที่อยู่ภายใน shadow root จะถูก scope อย่างสมบูรณ์ — สไตล์ของหน้าไม่รั่วเข้าไป และสไตล์ของ shadow ก็ไม่รั่วออกมา แต่มีกลไกสามอย่างที่ข้ามขอบเขตนี้โดยตั้งใจ ได้แก่ selectors :host / ::slotted / ::part และ CSS custom properties การเข้าใจว่า rule ใดถูกแยกออกและ rule ใดทะลุผ่าน shadow boundary โดยตั้งใจ คือรากฐานของการทำ theming ให้ web component อย่างมั่นคง

flowchart LR
  subgraph Page
    PA[".btn color red"]
    PB["::part(label)"]
    PC["--theme-color blue"]
  end
  subgraph Shadow
    SA[":host styles"]
    SB["::slotted(span)"]
    SC["var(--theme-color)"]
    SD["internal .btn"]
  end
  PA -. "blocked" .-> SD
  PB --> SC
  PC --> SC
Shadow boundary — อะไรทะลุได้และอะไรไม่ได้

โมดูลนี้ครอบคลุมสี่หัวข้อที่เมื่อรวมกันแล้วจะทำให้คุณควบคุมการจัดสไตล์ shadow DOM ได้อย่างสมบูรณ์:

  1. selectors :host — จัดสไตล์ตัว custom element เองจากภายใน shadow root
  2. ::slotted — กำหนดเป้าหมาย children ใน light DOM ที่ตกลงไปอยู่ใน slot
  3. ::part และ exportparts — เปิดเผย internals ที่ตั้งชื่อไว้เพื่อให้ CSS ของหน้าจัดสไตล์ได้
  4. CSS custom properties และ Constructable Stylesheets — วิธี theming ที่ยืดหยุ่นที่สุด
Selector ใดที่ให้ CSS ของหน้าจัดสไตล์ element ใน shadow root ได้โดยระบุชื่อ?
CSS custom properties (--var) ข้ามขอบเขต shadow boundary ได้หรือไม่?
Selector ใดจัดสไตล์ host element เองจากภายใน shadow root?