首页 > web前端 > js教程 > 正文

Web组件:Custom Elements与Shadow DOM

betcha
发布: 2025-11-20 21:54:07
原创
357人浏览过
Custom Elements 和 Shadow DOM 结合实现高度封装的自定义组件,通过定义标签、隔离样式、监听属性变化,支持内容分发与事件代理,可在任何现代浏览器中构建可复用、无框架依赖的 UI 组件。

web组件:custom elements与shadow dom

Custom Elements 和 Shadow DOM 是 Web Components 的核心部分,它们让开发者可以创建可复用、封装良好的自定义 HTML 元素。这两项技术结合使用,能实现真正意义上的组件化开发,无需依赖框架也能构建结构清晰、样式隔离的 UI 组件。

Custom Elements:定义自己的 HTML 标签

Custom Elements 允许你创建新的 HTML 标签,并赋予其行为逻辑。通过 JavaScript 定义类并继承 HTMLElement,然后使用 customElements.define() 方法注册元素。

例如,你可以定义一个名为 <my-card> 的卡片组件:

class MyCard extends HTMLElement {
   constructor() {
     super();
     // 可在此设置默认内容或事件监听
   }

   connectedCallback() {
     this.innerHTML = `

${this.getAttribute('title')}
`;
   }
}

customElements.define('my-card', MyCard);

之后就可以在页面中直接使用:<my-card title="欢迎"></my-card>。元素会在插入 DOM 时自动渲染内容。

Shadow DOM:实现样式与结构的封装

Shadow DOM 提供了一个独立的 DOM 子树,与主文档 DOM 隔离。这意味着组件内部的样式不会影响外部页面,外部样式也不会意外修改组件内部结构。

在 Custom Element 中启用 Shadow DOM 很简单,只需在构造函数中调用 this.attachShadow({ mode: 'open' })

Booltool
Booltool

常用AI图片图像处理工具箱

Booltool 140
查看详情 Booltool

constructor() {
   super();
   const shadow = this.attachShadow({ mode: 'open' });
   shadow.innerHTML = `
     
     

`;
}

这里用了 <slot> 来支持内容分发,使得外部传入的内容可以被正确渲染进组件内部。

组合使用的优势

将 Custom Elements 和 Shadow DOM 结合,能实现高度封装的组件:

  • 自定义标签语义清晰,提升代码可读性
  • 样式和结构完全隔离,避免全局污染
  • 支持响应属性变化,可在 observedAttributes 中监听属性更新
  • 无需框架即可在任何项目中使用,兼容现代浏览器

比如添加属性监听:

static get observedAttributes() { return ['title']; }

attributeChangedCallback(name, oldValue, newValue) {
   if (name === 'title') {
     this.shadowRoot.querySelector('.card').textContent = newValue;
   }
}

基本上就这些。掌握 Custom Elements 和 Shadow DOM 后,你可以写出真正独立、可移植的 Web 组件,为复杂应用提供干净的 UI 模块化方案。不复杂但容易忽略细节,比如正确使用 slot 和处理事件代理。

以上就是Web组件:Custom Elements与Shadow DOM的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号