什么是J*aScript的Web Components_自定义元素和Shadow DOM如何工作?
发布时间:2025-12-15 04:17
发布者:网络
浏览次数:Web Components 是浏览器原生支持的可复用自定义元素标准,核心含自定义元素(需含短横线命名、继承 HTMLElement)和 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
AI网页设计Figma插件
76
查看详情
- 在自定义元素的
constructor或connectedCallback中调用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如何工作?的详细内容,更多请关注其它相关文章!
# css
# vue
# react
# javascript
# java
# html
# js
# 浏览器
# 工具
# 自定义
# 也不
# 复用
# 弹出
# 如何实现
# 自己的
# 背景色
# 是一个
# 这是
# 你可以
# qq关键词排名规则
# seo需要文化吗
# 陕西网站推广价位优化
# 如何营销推广只信j火20星荐
# 稳定seo快速优化教程
# 娄底网站建设收益高
# 网站建设实训试卷
# 潮州网站优化哪里好
# 乐山公司网络营销推广招聘
# 铜川怎么做网站优化排名





中调用