带你读《现代Javascript高级教程》二十二、JS Shadow DOM:创建封装的组件和样式隔离(1)

简介: 带你读《现代Javascript高级教程》二十二、JS Shadow DOM:创建封装的组件和样式隔离(1)

二十二、JS Shadow DOM:创建封装的组件和样式隔离

引言

在现代的 Web 开发中,组件化和样式隔离是非常重要的概念。为了解决这些问题,Web 标准引入了 Shadow DOM 技术。Shadow DOM 允许开发者创建封装的组件,并将组件的样式和行为隔离在组件的 Shadow DOM 内部。本文将详细介绍 Shadow DOM 的属性和 API,并探讨其在实际开发中的应用场景。

1. 什么是 Shadow DOM

Shadow DOM 是一项 Web 标准,用于创建封装的组件并实现样式隔离。它允许将组件的 HTML 结构、样式和行为封装在一个独立的 DOM 树中,从而与主文档的 DOM 树相互隔离。通过这种方式,开发者可以创建具有独立样式和行为的组件,而不用担心与其他组件或主文档的样式冲突。

2. Shadow DOM API

Shadow DOM 提供了一系列用于操作和管理 Shadow DOM 的 API。

1)添加 Shadow Root:attachShadow(options)

attachShadow 方法用于将 Shadow DOM 附加到指定的元素上。它接收一个 options 参数,用于指定 Shadow DOM 的模式。

const hostElement = document.getElementById('host-element');const shadowRoot = hostElement.attachShadow({ mode: 'open' });

2)获取 Shadow Root:shadowRoot

shadowRoot 属性返回与元素关联的 Shadow Root。

 

const shadowRoot = hostElement.shadowRoot;

3) 在 Shadow Root 中查询元素:querySelector(selector)

querySelector 方法在 Shadow Root 内部查找匹配指定选择器的第一个元素。

 

const element = shadowRoot.querySelector('.my-element');

4 在 Shadow Root 中查询元素列表:querySelectorAll(selector)

querySelectorAll 方法在 Shadow Root 内部查找匹配指定选择器的所有元素。

 

const elements = shadowRoot.querySelectorAll('.my-element');

5 获取 Shadow Root 的宿主元素:host

host 属性返回与 Shadow Root 相关联的宿主元素。

 

const hostElement = shadowRoot.host;

3. Shadow DOM 应用场景

Shadow DOM 在 Web 开发中有许多实际应用场景,下面是几个常见的场景:

1)Web 组件开发

Shadow DOM 可以帮助开发者创建封装的 Web 组件,确保组件的样式和行为不会被外部影响。以下是一个示例,演示如何使用 Shadow DOM 创建一个自定义按钮组件:

 

/* 组件的样式 */
    .custom-button {
      background-color: 007bff;
 color: white;
      padding: 10px 20px;
      border-radius: 4px;
      cursor: pointer;
    }
    // 创建 Shadow Root
    const hostElement = document.getElementById('custom-button-container');
    const shadowRoot = hostElement.attachShadow({ mode: 'open' });
    // 创建自定义按钮
    const button = document.createElement('button');
    button.classList.add('custom-button');
    button.textContent = 'Click me';
    // 将按钮添加到 Shadow Root 中
    shadowRoot.appendChild(button);

 

在上面的示例中,我们创建了一个 Shadow Root,并将其附加到 custom-button-container 宿主元素上。然后,我们在 Shadow Root 中创建了一个自定义按钮,并将其添加到 Shadow Root 中。


带你读《现代Javascript高级教程》二十二、JS Shadow DOM:创建封装的组件和样式隔离(2)

https://developer.aliyun.com/article/1349525?groupCode=tech_library

相关文章
|
JavaScript 前端开发 Go
CSS 与 JS 对 DOM 解析和渲染的影响
【10月更文挑战第16天】CSS 和 JS 会在一定程度上影响 DOM 解析和渲染,了解它们之间的相互作用以及采取适当的优化措施是非常重要的。通过合理的布局和加载策略,可以提高网页的性能和用户体验,确保页面能够快速、流畅地呈现给用户。在实际开发中,要根据具体情况进行权衡和调整,以达到最佳的效果。
483 57
|
JavaScript 前端开发 开发者
哇塞!Vue.js 与 Web Components 携手,掀起前端组件复用风暴,震撼你的开发世界!
【8月更文挑战第30天】这段内容介绍了Vue.js和Web Components在前端开发中的优势及二者结合的可能性。Vue.js提供高效简洁的组件化开发,单个组件包含模板、脚本和样式,方便构建复杂用户界面。Web Components作为新兴技术标准,利用自定义元素、Shadow DOM等技术创建封装性强的自定义HTML元素,实现跨框架复用。结合二者,不仅增强了Web Components的逻辑和交互功能,还实现了Vue.js组件在不同框架中的复用,提高了开发效率和可维护性。未来前端开发中,这种结合将大有可为。
590 0
|
JavaScript
js 中操作dom
js 中操作dom
488 162
|
JavaScript 前端开发 索引
js中DOM的基础方法
【10月更文挑战第31天】这些DOM基础方法是操作网页文档结构和实现交互效果的重要工具,通过它们可以动态地改变页面的内容、样式和行为,为用户提供丰富的交互体验。
|
XML 移动开发 JavaScript
js中BOM和DOM总结(基础篇)
文章总结了JavaScript的BOM和DOM知识点,包括window、screen、location、history、navigator对象,以及消息框、计时器和cookie。同时,介绍了DOM的概念、节点获取和修改方法,以及事件处理。
js中BOM和DOM总结(基础篇)
|
JavaScript 前端开发 开发者
.js的dom元素操作
【10月更文挑战第29天】通过灵活运用这些 DOM 元素操作方法,JavaScript 可以实现丰富的网页交互效果,如动态更新页面内容、响应用户操作、创建和删除页面元素等。在实际开发中,开发者可以根据具体的需求和场景,选择合适的 DOM 元素操作方法来实现所需的功能,为用户提供更加流畅和动态的网页体验。
|
移动开发 JavaScript 前端开发
原生js如何获取dom元素的自定义属性
原生js如何获取dom元素的自定义属性
605 4
|
JavaScript 前端开发 API
探索Vue.js 3的组合式API:一种更灵活的组件状态管理方式
【10月更文挑战第5天】探索Vue.js 3的组合式API:一种更灵活的组件状态管理方式
|
JavaScript 前端开发 索引
你可能没有听说过 js中的 DOM操作还有这个: HTMLCollection 和 NodeList
该文章详细解释了JavaScript中HTMLCollection和NodeList这两种DOM集合类型的特性、使用方法及其区别,并通过实例代码展示了如何操作这两种集合来选取和遍历DOM元素。
|
JavaScript 前端开发 索引
JavaScript HTML DOM 集合(Collection)
JavaScript HTML DOM 集合(Collection)
170 4

热门文章

最新文章