新闻中心

什么是J*aScript的Web Components_自定义元素和Shadow DOM如何工作?

2025-12-15
浏览次数:
返回列表
Web Components 是浏览器原生支持的可复用自定义元素标准,核心含自定义元素(需含短横线命名、继承 HTMLElement)和 Shadow DOM(提供样式与结构隔离),二者协作实现真正封装。

什么是javascript的web components_自定义元素和shadow dom如何工作?

Web Components 是浏览器原生支持的一套技术标准,让开发者能创建可复用、封装良好的自定义 HTML 元素。它不是框架,也不依赖第三方库,核心包括三部分:自定义元素(Custom Elements)、Shadow DOM 和 HTML 模板(<template></template>)。其中自定义元素和 Shadow DOM 是最常用、最关键的两个模块。

自定义元素:用 J*aScript 定义新 HTML 标签

你可以像使用 <div> 或 <code><button></button> 一样,定义并使用自己的标签,比如 <my-card></my-card><date-picker></date-picker>。浏览器通过 customElements.define() 注册这个新元素,且标签名必须包含短横线(-),这是强制规范,防止与未来 HTML 标准冲突。

定义方式有两种:

  • 基于类的自定义元素:继承 HTMLElement,在构造函数中初始化,用 connectedCallback 响应元素被插入 DOM 的时机
  • 自治型(autonomous)元素:完全新建标签,不继承内置元素(如不继承 HTMLButtonElement
  • 定制内建元素(customized built-in elements):扩展原生元素(如 extends 'button'),需在 HTML 中用 is 属性调用,例如 <button is="fancy-button"></button>

Shadow DOM:为组件提供样式和结构的私有边界

Shadow DOM 是一段附加在某个元素上的“影子” DOM 树,它与主文档 DOM 隔离。这种隔离是真正的封装——外部 CSS 选不到 Shadow 内部的节点,内部样式也不会意外泄漏到全局,JS 也默认无法跨边界访问(除非显式设置 {mode: 'open'} 并通过 element.shadowRoot 访问)。

创建 Shadow DOM 很简单:

Musho Musho

AI网页设计Figma插件

Musho 76 查看详情 Musho
  • 在自定义元素的 constructorconnectedCallback 中调用 this.attachShadow({mode: 'open'})
  • 然后向 this.shadowRoot 插入 HTML 结构、样式或模板内容
  • mode: 'closed' 会彻底屏蔽外部 JS 访问,一般不推荐,调试困难

两者协作:一个最小可用的自定义卡片组件

下面是一个带 Shadow DOM 的 <my-card></my-card> 示例逻辑:

  • 注册 MyCard 类,继承 HTMLElement
  • constructor 中调用 attachShadow 创建 Shadow 根节点
  • connectedCallback 中向 shadowRoot 写入结构和 <style></style>,样式只作用于该组件内部
  • 支持通过 attributeChangedCallback 监听属性变化(如 title),实现响应式更新

这样写出来的 <my-card title="Hello"></my-card> 就是独立、可复用、无样式污染的组件。

基本上就这些。不需要构建工具,不依赖 React 或 Vue,纯浏览器能力。关键点在于:自定义元素负责“怎么用”,Shadow DOM 负责“怎么藏”。两者配合,才真正实现 Web 级别的组件化封装。

以上就是什么是J*aScript的Web Components_自定义元素和Shadow DOM如何工作?的详细内容,更多请关注其它相关文章!


# 自己的  # 铜川怎么做网站优化排名  # 乐山公司网络营销推广招聘  # 潮州网站优化哪里好  # 网站建设实训试卷  # 娄底网站建设收益高  # 稳定seo快速优化教程  # 如何营销推广只信j火20星荐  # 陕西网站推广价位优化  # seo需要文化吗  # qq关键词排名规则  # 你可以  # 这是  # 是一个  # 背景色  # css  # 如何实现  # 弹出  # 复用  # 也不  # 自定义  # 工具  # 浏览器  # js  # html  # java  # javascript  # react  # vue 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: AO3官方在线访问地址 Archive of Our Own最新镜像合集  解决Bootstrap卡片顶部边距导致背景图下移的问题  优化 Jest 模拟:强制未实现函数抛出错误以提升测试效率  在Typer应用中优雅地处理和重组任意命令行参数  Go语言中JSON数据解析与字段访问教程  CSS实现侧边栏导航项全宽圆角悬停背景效果  html怎么运行外部js文件中的函数_运html外js文件函数法【技巧】  顺丰快递查单号物流信息 顺丰快递小程序查询入口  深入理解字体排版:Adobe光学字偶距与CSS字偶距的差异与实现  为什么我的微信朋友圈看不到别人的更新_微信朋友圈更新显示异常解决方法  Win11怎么开启卓越性能模式 Win11电源选项启用高性能释放硬件潜力【方法】  夸克AO3官网入口_AO3镜像网站2025推荐  zookeeper 都有哪些功能?  一加 14R 快充无反应_一加 14R 充电优化  腾讯QQ邮箱官方网站_QQ邮箱网页版在线登录  qq邮箱发邮件给国外发不出去_QQ邮箱国际邮件发送失败原因与解决  Windows10怎么开启存储感知 Windows10系统设置自动清理临时文件释放C盘空间【教程】  如何在J*a中实现统一对象行为接口_项目大型化时的接口规范化  俄罗斯搜索引擎Yandex指南 附2025年免登录官网入口  MAC怎么安装Homebrew包管理器_MAC为开发者和高级用户安装命令行工具  Python多版本共存与虚拟环境管理深度指南  豆包手机助手发布技术预览版:直接嵌入手机系统!努比亚样机发售  J*aScript实现单选按钮与关联输入框的联动禁用教程  J*a实现学校排课程序_面向对象结构化项目示例  poki免费入口快捷访问 poki人气小游戏直接玩站点  纯CSS与HTML网格布局的HTML精简策略:SVG与JS方案解析  vivo浏览器自带的下载器速度慢怎么办 vivo浏览器提升文件下载速度的技巧  支付宝如何设置安全保护_支付宝安全设置的全面教程  《噬血代码2》新预告片发布 展示游戏剧情  Go语言JSON解析深度指南:动态访问与结构体映射实践  漫蛙2正版漫画站 漫蛙2网页版快速访问入口  163邮箱注册官网 免费申请163个人邮箱  如何在 Excel Online 和 Google 表格中更改日期格式  Golang如何使用context实现超时取消_Golang context超时取消模式实践  c++项目目录结构应该如何组织_c++工程化项目结构规范  小猿搜题在线学习页面在哪_小猿搜题在线学习中心入口  Node.js 中使用 node-cron 实现定时 API 数据抓取与处理  QQ邮箱登录首页官网地址2026 QQ邮箱官方网页入口  微信商城在哪里打开【步骤】  2025年云电脑操作系统体验 | 无需本地硬件,随时随地使用高性能PC  Yandex免登录网页版地址 Yandex搜索引擎官方访问入口  优化 Python 函数中的条件逻辑:解决 if-else 嵌套与参数选择问题  使用Pandas转换并合并DataFrame:多列映射至统一结构  抖音网页版企业服务中心登录入口_抖音网页版企业登录平台  Vue.js 图片显示异常排查:理解应用挂载范围与DOM ID唯一性  深入理解与实现最大堆的Heapify过程:常见错误与修正  CSS Box Model与弹性按钮:维持布局稳定的动画实践  126邮箱网页版官方入口 126邮箱账号在线登录平台  composer的"require-dev"部分是用来做什么的?  Win10双系统截图高效法 截屏快捷键速记【技巧】 

搜索