Web Components 入门教程:掌握 Shadow DOM 的使用

阅读时长 5 分钟读完

Web Components 是一项供开发者创建可重用 Web 组件的技术,它由 Custom Elements、Templates、Shadow DOM 和 HTML Import 等组成。其中,Shadow DOM 是 Web Components 中最为重要和核心的部分,它通过创建一个独立的 DOM 子树来实现组件的封装性和私有性。

Shadow DOM 概述

Shadow DOM 可以看作是一种浏览器原生支持的 DOM 封装方案,它允许开发者在当前文档的 DOM 结构上创建一个独立的子树,使得该子树内部的内容和样式不会受到外部环境的干扰。同时,Shadow DOM 还支持事件的捕获和冒泡,使得组件内部的事件处理更加丰富灵活。

Shadow DOM 主要由以下 3 个部分组成:

  • Shadow host:外部文档中的一部分 DOM 结构,Shadow DOM 会被插入到该部分 DOM 中,成为该部分 DOM 的一部分;
  • Shadow tree:Shadow DOM 内部的 DOM 结构,与外部文档分离,并且不会和外部文档的其他 DOM 结构发生冲突;
  • Shadow boundary:Shadow DOM 内部的 DOM 结构与与外部文档分割的边界。

Shadow DOM 的使用

在 Web Components 中使用 Shadow DOM 可以分为以下几个步骤:

1. 创建 Shadow DOM 元素

创建 Shadow DOM 需要使用 attachShadow 方法,该方法接受一个 mode 参数,表示 Shadow DOM 的类型,可以是 openclosedmodeopen 时,外部文档可以访问 Shadow DOM 内部的元素, modeclosed 时,外部文档无法访问 Shadow DOM 内部的元素。

-- -------------------- ---- -------
----- ----------- ------- ----------- -
    ------------- -
        --------
        ----- ------ - ------------------- ----- ------ ---

        -- ----- ------ --- ------ ------ --- -
        ----- - - ----------------------------
        ------------- - ------ --------
        ----------------------
    -
-

------------------------------------- -------------

2. 编写模板

模板是 Shadow DOM 内部的所有 DOM 结构的集合,可以使用 HTML 的标准模板语法 (<template>...</template>) 编写模板。模板内部的 DOM 结构和样式将不会影响外部文档的 DOM 结构和样式。

-- -------------------- ---- -------
----- -------- - -----------------------------------
------------------ - -
    -------
        - -
            ------ ----
        -
    --------
    -------- ----------
--

3. 插入 Shadow DOM

将模板内容插入到 Shadow DOM 的根节点即可。

示例代码

下面通过一个例子来演示如何使用 Shadow DOM 来创建一个自定义按钮组件。

-- -------------------- ---- -------
---- -------------- ---
--------- ------------------------
    -------
        ------ -
            -------- -----
            ----------------- -----
            ------ -----
            ------- -----
            -------------- ----
            ------- --------
        -
    --------
    ------------------------------
-----------

--------
    ----- -------- ------- ----------- -
        ------------- -
            --------
            ----- ------ - ------------------- ----- ------ ---

            -- ----
            ----- -------- - ----------------------------------------------

            -- ------- ------ ---
            -----------------------------------------------------
        -
    -

    ---------------------------------- ----------
---------

我们可以在其他页面中使用 <my-button> 来显示自定义按钮:

-- -------------------- ---- -------
--------- -----
------
    ------
        ---------- ---------- ------------
    -------
    ------
        --------------------------
    -------
-------

总结

Shadow DOM 是 Web Components 中非常重要的一个组成部分,它通过创建一个独立的 DOM 子树来隔离组件内部和外部的 DOM 结构和样式,实现了组件的封装性和私有性。掌握 Shadow DOM 的使用方法对于开发高质量、可维护的 Web 组件非常重要。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6522d24e95b1f8cacda49809

纠错
反馈