在此示例中,我们定义了一个新的自定义元素 。在其构造函数中,我们使用 this.attachShadow({ mode: 'open' }) 附加一个影子根,然后向其附加一些内容。影子根中定义的样式与文档的其余部分隔离。

Shadow DOM 模式

创建影子根时,可以指定其模式为开放或封闭。

封闭模式示例

const shadow = this.attachShadow({ mode: \\'closed\\' });

在此模式下,无法从组件外部访问影子,增加了额外的保护层。

Shadow DOM 样式

您可以直接在 Shadow DOM 中定义样式。这些样式仅适用于影子树中的内容。

const style = document.createElement(\\'style\\');style.textContent = `    div {        font-size: 20px;        color: red;    }`;shadow.appendChild(style);

通过将

”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 理解 Shadow DOM:封装 Web 组件的关键

理解 Shadow DOM:封装 Web 组件的关键

发布于2024-11-07
浏览:469

Understanding Shadow DOM: The Key to Encapsulated Web Components

在现代 Web 开发中,创建可重用和可维护的组件至关重要。 Shadow DOM 是 Web 组件标准的一部分,在实现这一目标方面发挥着至关重要的作用。本文深入探讨了 Shadow DOM 的概念、它的优点以及如何在您的项目中有效地使用它。

什么是 Shadow DOM?

Shadow DOM 是一种允许您将 DOM 和 CSS 的一部分封装在 Web 组件内的技术,确保其与文档的其余部分隔离。这种封装可以防止样式和脚本泄漏或泄漏,从而更容易构建模块化和可维护的组件。

Shadow DOM 的关键概念

  1. Shadow Tree:附加到 Web 组件的独立、隐藏的 DOM 树。
  2. Shadow Root:影子树的根节点。
  3. Shadow Host:托管影子树的常规 DOM 元素。
  4. Shadow Boundary:影子树和常规 DOM 之间的边界。

Shadow DOM 的优点

1. 封装

Shadow DOM 在组件的内部结构和应用程序的其余部分之间提供了清晰的分离。这种封装有助于防止样式和行为冲突,使您的组件更可预测且更易于维护。

2. 风格隔离

使用 Shadow DOM,您可以定义仅适用于影子树内内容的样式。这种隔离确保组件的样式不会影响页面的其余部分,反之亦然。

3. 增强的可重用性

封装组件更可重用,因为它们是独立的。您可以在不同的项目中轻松共享和使用这些组件,而无需担心集成问题。

创建 Shadow DOM

让我们看一个在 JavaScript 中创建 Shadow DOM 的简单示例。



    Shadow DOM Example

在此示例中,我们定义了一个新的自定义元素 。在其构造函数中,我们使用 this.attachShadow({ mode: 'open' }) 附加一个影子根,然后向其附加一些内容。影子根中定义的样式与文档的其余部分隔离。

Shadow DOM 模式

创建影子根时,可以指定其模式为开放或封闭。

  • 开放模式:可以使用JavaScript访问shadow root,允许交互和操作。
  • 封闭模式:影子根无法从JavaScript访问,提供更高级别的封装。

封闭模式示例

const shadow = this.attachShadow({ mode: 'closed' });

在此模式下,无法从组件外部访问影子,增加了额外的保护层。

Shadow DOM 样式

您可以直接在 Shadow DOM 中定义样式。这些样式仅适用于影子树中的内容。

const style = document.createElement('style');
style.textContent = `
    div {
        font-size: 20px;
        color: red;
    }
`;
shadow.appendChild(style);

通过将

结论

Shadow DOM 是一项强大的功能,它通过提供封装和样式隔离来增强我们构建 Web 组件的方式。通过利用 Shadow DOM,开发人员可以创建模块化、可重用且可维护的组件,这些组件可以无缝集成到任何 Web 应用程序中。对于任何现代 Web 开发人员来说,理解和利用 Shadow DOM 都是一项宝贵的技能。

版本声明 本文转载于:https://dev.to/mdhassanpatwary/understanding-shadow-dom-the-key-to-encapsulated-web-components-4bki?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • Tailwind CSS 简介 – 实用程序优先的框架
    Tailwind CSS 简介 – 实用程序优先的框架
    Tailwind CSS 简介 – 实用程序优先的框架 在本文中,我们将探索 Tailwind CSS,这是一种流行的实用程序优先 CSS 框架,可让您快速构建现代网站,而无需编写自定义 CSS。与传统的 CSS 框架不同,Tailwind 不附带预先设计的组件,而是提供实用程序类...
    编程 发布于2024-11-07
  • 如何使用 Python 从网站中提取链接和数据
    如何使用 Python 从网站中提取链接和数据
    **提取链接和
    编程 发布于2024-11-07
  • 如何使用 jQuery 确定 HTML 元素是否为空?
    如何使用 jQuery 确定 HTML 元素是否为空?
    使用 jQuery 查找空 HTML 元素如果您需要在 Web 应用程序中确定 HTML 元素是否为空,jQuery 提供了方便的方法这样做的方法。以下是使用 jQuery 完成此操作的方法:使用 is(':empty') 选择器:is(':empty') 选择器检查...
    编程 发布于2024-11-07
  • 如何在非集成网站的 JavaScript 控制台中包含 jQuery?
    如何在非集成网站的 JavaScript 控制台中包含 jQuery?
    在 JavaScript 控制台中包含 jQuery在 JavaScript 控制台中包含 jQuery 对于缺乏集成的网站来说是有益的。这使得开发人员能够利用 jQuery 的功能,例如检索表中的行数,甚至在本身不支持 jQuery 的网站上也是如此。要在 JavaScript 控制台中包含 jQ...
    编程 发布于2024-11-07
  • 尽管使用了有效的 INSERT 语句,为什么我的 JDBC 代码仍会抛出 MySQLSyntaxErrorException?
    尽管使用了有效的 INSERT 语句,为什么我的 JDBC 代码仍会抛出 MySQLSyntaxErrorException?
    JDBC Exception: MySQLSyntaxError with Valid SQL Statement在本文中,我们深入研究使用 JDBC 向数据库插入数据时遇到的问题。 MySQL 数据库。尽管在 MySQL Workbench 中执行了有效的 INSERT 语句,我们还是收到了 My...
    编程 发布于2024-11-07
  • 如何使用数组函数按列值比较对象数组?
    如何使用数组函数按列值比较对象数组?
    使用数组函数按列值比较对象数组许多编程语言都提供用于比较数组的内置函数。但是,这些函数通常使用原始数据类型和数组,而不是对象数组。这就提出了如何根据特定属性或列来比较对象数组的问题。为了解决这个问题,PHP 提供了 array_udiff,该函数可以通过指定自定义比较函数来比较对象数组。考虑以下示例...
    编程 发布于2024-11-07
  • React 的 useEffect Hook 简化:像专业人士一样管理副作用
    React 的 useEffect Hook 简化:像专业人士一样管理副作用
    了解 React 中的 useEffect:从零到英雄 React 已成为构建动态用户界面最流行的 JavaScript 库之一。 React 中最重要的钩子之一是 useEffect,它允许开发人员管理功能组件中的副作用。副作用包括获取数据、设置订阅或手动操作 DOM 等操作。在...
    编程 发布于2024-11-07
  • 扩展 Node.js 应用程序:技术、工具和最佳实践
    扩展 Node.js 应用程序:技术、工具和最佳实践
    随着 Node.js 应用程序的增长,对更好的性能和可扩展性的需求也在增加。 Node.js 旨在处理大规模数据密集型应用程序,但了解如何正确扩展它对于在负载下保持性能和可用性至关重要。在本文中,我们将介绍有效扩展 Node.js 应用程序的关键技术和工具。 为什么要扩展 Node....
    编程 发布于2024-11-07
  • 使用 PHP 的动态图像画廊:在线展示您的作品
    使用 PHP 的动态图像画廊:在线展示您的作品
    使用PHP创建动态图像画廊的步骤:安装依赖项:PHP GD库和(可选)ImageMagick。创建画廊页面:循环遍历要显示的图像并生成缩略图(使用createThumbnail()函数)。输出图像缩略图:使用HTML创建一个无序列表来显示缩略图。添加其他功能(可选):分页、排序、过滤、上传表单和灯箱...
    编程 发布于2024-11-07
  • 学习 CSS:我设计网页样式的第一步
    学习 CSS:我设计网页样式的第一步
    从周一到今天,我向前迈出了重要的一步,深入研究了 CSS,一种融入网页的样式语言。 ? 首先学习基础知识——选择器、代码块、声明及其值。看到几行代码如何将纯 HTML 转换为具有视觉吸引力的内容是令人兴奋的。在 CSS 中,样式可以通过三种方式实现:内联样式(通过在开始标记中添加 style 属性)...
    编程 发布于2024-11-07
  • 新手前端开发人员面试问题
    新手前端开发人员面试问题
    HTML Interview - 5 Questions 1. What is HTML5 and what are its new features? Answer: HTML5 is the latest version of HTML, which includes new semantic...
    编程 发布于2024-11-07
  • 在 Python 中实现异常处理的最佳实践
    在 Python 中实现异常处理的最佳实践
    编写有效的异常处理代码对于创建健壮且可维护的应用程序至关重要。 以下是在 Python 中编写异常处理代码的一些最佳实践: 1. 只捕捉你能处理的东西 具体说明: 捕获特定异常,而不是使用广泛的 except 子句。 这确保了只有您期望并知道如何处理的异常才会被捕获。 try: ...
    编程 发布于2024-11-07
  • 如何销售 Next.js 代码并增加收入
    如何销售 Next.js 代码并增加收入
    Next.js 是一个被 Web 开发人员广泛使用的 React 框架,因为它能够构建高性能 Web 应用程序以及服务器端渲染和动态路由等功能。如果您是一位拥有 Next.js 经验的开发人员,您可以通过出售您创建的代码来利用这种专业知识。以下是销售 Next.js 代码并增加收入的一些有效方法。 ...
    编程 发布于2024-11-07
  • CSS 中的 Pt 与 Px:什么时候应该使用每个测量单位?
    CSS 中的 Pt 与 Px:什么时候应该使用每个测量单位?
    解读细微差别:CSS 中的 pt 与 px在网页设计领域,CSS 是样式元素的支柱。造型的一个重要方面是选择合适的测量单位。 pt 和 px 是两个流行的选项,但它们的区别常常让我们感到困惑。让我们深入研究这些单位的复杂性,以便对其使用做出明智的决定。有什么区别?与人们最初的假设相反,CSS 中的“...
    编程 发布于2024-11-07
  • 在网页设计中什么时候应该使用绝对定位?
    在网页设计中什么时候应该使用绝对定位?
    绝对定位在网页设计中是禁忌吗?在设计网页时,您可能会遇到建议使用绝对定位的建议对于页面元素来说,这是不受欢迎的,而应该提倡相对定位。这就引发了关于此建议背后的基本原理以及在这些定位方法之间进行选择时应遵循的指南的问题。让我们深入探讨这个主题:在象棋类游戏中的绝对定位在您的情况下,您正在创建类似国际象...
    编程 发布于2024-11-07

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3