HTML5 Web Components 通过 Custom Elements、Shadow DOM 和 HTML 模板实现原生组件化开发,支持自定义标签、样式隔离、模板复用与属性响应,适用于轻量级项目和跨框架组件共享。

HTML5 Web Components 是一套可以让开发者创建可复用、封装良好的自定义 HTML 元素的技术。它不依赖任何框架,原生支持现代浏览器,适合构建组件化前端应用。核心由三项技术组成:自定义元素(Custom Elements)、影子 DOM(Shadow DOM)和 HTML 模板()。下面介绍如何使用它们实现组件化开发。
Custom Elements 允许你定义自己的 HTML 标签,并绑定 J*aScript 类来控制其行为。
通过 customElements.define() 方法注册一个新元素,例如创建一个
class MyCard extends HTMLElement {
constructor() {
super();
this.innerHTML = `
<h3>${this.getAttribute('title')}</h3>
<p>${this.textContent}</p>
`;
}
}
customElements.define('my-card', MyCard);
之后就可以在页面中使用:
Shadow DOM 能将组件的 DOM 和 CSS 封装起来,避免全局污染。在构造函数中调用 attachShadow() 创建影子根节点。
修改上面的例子,加入 Shadow DOM:
class MyCard extends HTMLElement {
constructor() {
super();
const shadow = this.attachShadow({ mode: 'open' });
const title = this.getAttribute('title');
const content = this.textContent;
shadow.innerHTML = `
<style>
:host {
display: block;
border: 1px solid #ddd;
border-radius: 8px;
padding: 16px;
font-family: sans-serif;
}
h3 {
margin: 0;
color: #005a9c;
}
p {
color: #333;
}
</style>
<h3>${title}</h3>
<p>${content}</p>
`;
}
}
customElements.define('my-card', MyCard);
:host 是 Shadow DOM 中的关键选择器,用于选中组件本身。
mallcloud商城
mallcloud商城基于SpringBoot2.x、SpringCloud和SpringCloudAlibaba并采用前后端分离vue的企业级微服务敏捷开发系统架构。并引入组件化的思想实现高内聚低耦合,项目代码简洁注释丰富上手容易,适合学习和企业中使用。真正实现了基于RBAC、jwt和oauth2的无状态统一权限认证的解决方案,面向互联网设计同时适合B端和C端用户,支持CI/CD多环境部署,并提
0
查看详情
对于结构较复杂的组件,建议使用 标签预定义 HTML 模板,提升性能和可维护性。
在 HTML 中定义模板:
<template id="card-template">
<style>
:host { display: block; border: 1px solid #ccc; padding: 1em; }
h3 { color: #0066cc; }
</style>
<h3><slot name="title">默认标题</slot></h3>
<p><slot>默认内容</slot></p>
</template>
J*aScript 中使用模板实例化:
class MyCard extends HTMLElement {
constructor() {
super();
const template = document.getElementById('card-template');
const content = template.content.cloneNode(true);
this.attachShadow({ mode: 'open' }).appendChild(content);
}
}
customElements.define('my-card', MyCard);
配合
通过定义 observedAttributes 和 attributeChangedCallback,可以监听属性变化并响应更新。
class MyCard extends HTMLElement {
static get observedAttributes() {
return ['title', 'theme'];
}
attributeChangedCallback(name, oldValue, newValue) {
if (name === 'title' && this.shadowRoot) {
const h3 = this.shadowRoot.querySelector('h3');
if (h3) h3.textContent = newValue;
}
if (name === 'theme') {
this.shadowRoot.host.style.backgroundColor = newValue === 'dark' ? '#333' : '#fff';
}
}
}
这样当外部修改属性时,组件能自动更新界面。
基本上就这些。HTML5 Web Components 提供了原生
的组件化能力,无需引入框架即可实现高内聚、低耦合的 UI 模块。虽然生态不如 React 或 Vue 丰富,但在轻量级项目、设计系统或跨框架组件共享中非常实用。关键是理解 Custom Elements、Shadow DOM 和 的协作方式,就能写出干净可复用的组件。
以上就是HTML5Web组件怎么用_HTML5WebComponents实现组件化开发的方法的详细内容,更多请关注其它相关文章!
相关文章:
TikTok国际版网页端快速入口 TikTok全球版短视频浏览教程
React/Next.js中实现列表项的动态移动与状态管理:兼论唯一键的重要性
在Go语言中利用后缀数组处理多字符串:实现高效文本匹配与自动补全
Lar*el开发:如何在编辑界面正确预选数据库中的多选标签
抖音极速版最新版本 抖音极速版官方下载地址
J*aScript打印功能_j*ascript输出控制
TikTok评论显示延迟如何处理 TikTok评论刷新优化方法
J*aScript中向JSON对象添加新属性的正确姿势
Composer的 COMPOSER_PROCESS_TIMEOUT 配置项有什么用_解决因执行时间过长而失败的Composer脚本
Surface怎么安装系统 微软Surface Pro U盘重装win11教程
微博网页版首页入口 微博电脑端官网登录链接
微博网页版主页入口 微博官方网站免登录访问
《铁拳8》黑皮辣妹新实机:元气满满的18岁少女!
快速CSGO开箱网站指南 CSGO开箱平台推荐
漫蛙MANWA漫画主页官方入口 漫蛙漫画最新在线阅读地址
C#中解析不规范的HTML为XML 常见的坑与解决办法
怎样在Excel中做仪表盘_Excel仪表盘设计与关键指标展示方法
谷歌google账号注册详细步骤 谷歌账号注册官方教程
蛙漫移动版在线看 蛙漫手机浏览器直达入口
c++ 命名空间怎么用 c++ namespace使用指南
“音游” × “怪文书” 题材的节奏冒险游戏 《晕晕电波症候群》确定于2026年4月发售!
Golang如何实现状态模式管理对象状态_Golang State模式实现技巧
《刺客信条:影》PS5 Pro和Switch 2画面对比
必由学官网首页入口 必由学教师网页版登录指南
J*aScript中安全有效地处理localStorage字符串数据
在Blazor WebAssembly应用中动态注入客户端特定指标代码的策略
Win11怎么关闭触摸屏_Windows 11禁用HID符合标准触摸屏
中兴BladeV30怎样用测距估书架层高_iPhone中兴BladeV30测距估书架层高【家装参考】
漫蛙官网正版漫画入口 漫蛙2官方网页登录地址
html5 app怎么运行环境_配html5 app运行环境【教程】
Safari浏览器输入栏卡顿如何解决 Safari搜索建议与缓存清理
深入理解rpy2中的类型转换:优化Python对象到R矩阵的映射
Lar*el Eloquent:基于关联关系是否存在进行父模型过滤与删除
VS Code远程开发时如何处理文件权限问题
AO3官方可用镜像 Archive of Our Own网页版最新入口
J*aScript生成器_j*ascript异步迭代
Windows7怎么硬盘安装 Windows7提取ISO镜像到非系统盘并运行setup.exe实现硬盘直装【教程】
ArrayList与LinkedList操作复杂度详解:遍历与修改
C++如何实现一个装饰器模式_C++设计模式之动态地给对象添加额外职责
在J*a中如何捕获IndexOutOfBoundsException_索引越界异常防护方法说明
企业名称高精度匹配:N-gram方法在结构相似性分析中的应用
蛙漫限时开放最深处链接_蛙漫全站漫画会员同款秒开地址
优化MinIO list_objects_v2 操作的性能瓶颈与最佳实践
如何优雅地扩展SprykerGlue后端API授权逻辑,使用spryker/glue-backend-api-application-authorization-connector-extension
Fabric模组开发:自定义物品与物品组的现代管理方法
如何修改开机登录密码_Windows账户安全设置超详细教程【必学】
Python复杂任务中断策略:通过回调函数实现优雅停止
J*aScript中在Map循环中检测并处理空数组元素
在Qt QML中通过Python字典动态更新TextEdit内容的教程
AO3最新入口2025公告_AO3中文官网合集