了解一下 Shadow DOM
基本上無(wú)害
發(fā)布于 云南 2025-01-21 · 4688瀏覽

概述

Q:Shadow DOM 是什么? A:是一種特殊的 DOM 樹,它依附于一個(gè)常規(guī)的 DOM 元素上

Q:Shadow DOM 有什么特性? A:它不受外部的 js 及 css 影響??梢岳斫鉃橐粋€(gè)隔離沙箱。

Q:Shadow DOM 有什么用? A:與外部的隔離性,意味它很適合用來(lái)封裝組件。它是 Web Component 的基礎(chǔ)。

一些需要了解的基本術(shù)語(yǔ):

- shadow host(影子宿主):影子 DOM 附加到的常規(guī) DOM 節(jié)點(diǎn)。

- shadow tree(影子樹):影子 DOM 內(nèi)部的 DOM 樹。

- shadow boundary(影子邊界):影子 DOM 終止,常規(guī) DOM 開始的地方。

- shadow root(影子根):影子樹的根節(jié)點(diǎn)。

創(chuàng)建

需要對(duì)宿主 DOM 調(diào)用 attachShadow() 方法來(lái)創(chuàng)建影子根實(shí)例。

attachShadow

attachShadow() 接受一個(gè)參數(shù)來(lái)設(shè)置 shadow root,是一個(gè) ShadowRootInit 字典,它包含兩個(gè)字段:

- mode(必填)

    字符串類型,可選值為:'open' 和 'close'。

    代表是否允許在外部使用 js 來(lái)訪問(wèn) Shadow DOM 內(nèi)部。

- delegatesFocus

    布爾類型。默認(rèn)值為 false。

    它的作用有點(diǎn)類似 <label>:當(dāng) shadow DOM 中不可聚焦的位置被點(diǎn)擊后,焦點(diǎn)是否會(huì)自動(dòng)轉(zhuǎn)移到 shadow DOM 內(nèi)部的第一個(gè)可聚焦元素(如 <input>、<textarea> 等)。

例子

為影子 DOM 添加樣式

影子 DOM 添加樣式有幾種方法:

  • 編程式:使用 CSSStyleSheet 創(chuàng)建,可復(fù)用
  • 聲明式:使用 <template> 聲明,或者直接在內(nèi)容中寫 <style>,不可復(fù)用

編程式

  1. 創(chuàng)建一個(gè)空的 CSSStyleSheet 對(duì)象
  2. 使用 CSSStyleSheet.replace() 或 CSSStyleSheet.replaceSync() 設(shè)置其內(nèi)容
  3. 通過(guò)將其賦給 ShadowRoot.adoptedStyleSheets 來(lái)添加到影子根

聲明式

或者更直接一點(diǎn):

基本上無(wú)害
火星宛如雪花,從42號(hào)有軌電車車頂?shù)墓渭娖魃巷w落而下。
瀏覽 4688
相關(guān)推薦
最新評(píng)論
贊過(guò)的人
評(píng)論加載中...

暫無(wú)評(píng)論,快來(lái)評(píng)論吧!