首页 > 其他分享 >什么是WebComponent

什么是WebComponent

时间:2024-01-05 23:01:41浏览次数:79  
标签:影子 元素 DOM 样式 什么 WebComponent CSS 模板

WebComponent 是一套技术的组合,具体涉及到了 Custom elements(自定义元素)、Shadow DOM(影子 DOM)和HTML templates(HTML 模板)。要使用 WebComponent,通常要实现下面三个步骤。

首先,使用 template 属性来创建模板。利用 DOM 可以查找到模板的内容,但是模板元素是不会被渲染到页面上的,也就是说 DOM 树中的 template 节点不会出现在布局树中,所以我们可以使用 template 来自定义一些基础的元素结构,这些基础的元素结构是可以被重复使用的。一般模板定义好之后,我们还需要在模板的内部定义样式信息。

其次,我们需要创建一个 GeekBang 的类。在该类的构造函数中要完成三件事:

  1. 查找模板内容;
  2. 创建影子 DOM;
  3. 再将模板添加到影子 DOM 上。

其实影子 DOM 的作用是将模板中的内容与全局 DOM 和 CSS 进行隔离,这样我们就可以实现元素和样式的私有化了。你可以把影子 DOM 看成是一个作用域,其内部的样式和元素是不会影响到全局的样式和元素的,而在全局环境下,要访问影子 DOM 内部的样式或者元素也是需要通过约定好的接口的。

总之,通过影子 DOM,我们就实现了 CSS 和元素的封装,在创建好封装影子 DOM 的类之后,我们就可以使用 customElements.define 来自定义元素了(可参考上述代码定义元素的方式)。

最后,就很简单了,可以像正常使用 HTML 元素一样使用该元素。

通过影子 DOM 可以隔离 CSS 和 DOM,不过需要注意一点,影子 DOM 的 JavaScript 脚本是不会被隔离的,比如在影子 DOM 定义的 JavaScript 函数依然可以被外部访问,这是因为 JavaScript 语言本身已经可以很好地实现组件化了。

影子 DOM 的作用主要有以下两点:

  1. 影子 DOM 中的元素对于整个网页是不可见的;
  2. 影子 DOM 的 CSS 不会影响到整个网页的 CSSOM,影子 DOM 内部的 CSS 只对内部的元素起作用。

什么是WebComponent_WebComponent

该图是上面那段示例代码对应的 DOM 结构图,从图中可以看出,我们使用了两次 geek-bang 属性,那么就会生成两个影子 DOM,并且每个影子 DOM 都有一个 shadow root 的根节点,我们可以将要展示的样式或者元素添加到影子 DOM 的根节点上,每个影子 DOM 你都可以看成是一个独立的 DOM,它有自己的样式、自己的属性,内部样式不会影响到外部样式,外部样式也不会影响到内部样式。

浏览器为了实现影子 DOM 的特性,在代码内部做了大量的条件判断,比如当通过 DOM 接口去查找元素时,渲染引擎会去判断 geek-bang 属性下面的 shadow-root 元素是否是影子 DOM,如果是影子 DOM,那么就直接跳过 shadow-root 元素的查询操作。所以这样通过 DOM API 就无法直接查询到影子 DOM 的内部元素了。

当生成布局树的时候,渲染引擎也会判断 geek-bang 属性下面的 shadow-root 元素是否是影子 DOM,如果是,那么在影子 DOM 内部元素的节点选择 CSS 样式的时候,会直接使用影子 DOM 内部的 CSS 属性。所以这样最终渲染出来的效果就是影子 DOM 内部定义的样式。



标签:影子,元素,DOM,样式,什么,WebComponent,CSS,模板
From: https://blog.51cto.com/key3feng/9120205

相关文章

  • 迈入AI智能时代!ChatGPT国内版免费AI助手工具 peropure·AI正式上线,打造场景化智慧服务
     当OpenAI发布ChatGPT的时候,没有人会意识到,新一代人工智能浪潮将给人类社会带来一场眩晕式变革。其中以ChatGPT为代表的AIGC技术加速成为AI领域的热门发展方向,推动着AI时代的前行发展。面对技术浪潮,清越科技(PeroPure)立足多样化生活场景、精准把握用户实际需求,持续精确Fine-......
  • 什么是人工智能幻觉?为什么AI会编造答案?丨曼孚科技
    当我们欣赏由AI生成的艺术作品时,往往会被其美感和独特性所吸引,它以令人惊叹的创造力和智能对话能力,在艺术、写作、音乐等领域展现出巨大潜力,仿佛具备了人类的创作天赋。然而,近期的一些事件引发了人们对AI系统输出准确性和可信度方面的关注,即“它自信地给出了看似正确实则错误的答......
  • 为什么sql server在1/2时返回0?
    原文链接:http://cn.voidcc.com/question/p-ysebrehb-rq.htmlselect cast(1/2asdecimal(9,2))也返回0原因:整数除法select1/2--0浮法分裂(至少有一个参数必须是浮/十进制):select1/2.0--0.5select1.0/2--0.5select1.0/2.0--0.5如果整数被除数是......
  • 云打印有什么优势?云打印的优点有哪些?
    伴随着互联网的发展,云打印技术也逐渐成熟。目前,云打印正受到广大用户的热烈追捧。那么云打印有什么优势?云打印的优点有哪些?今天小易就带大家来了解一下。 云打印有什么优势?云打印的优点有哪些?云打印是指有打印需求的用户通过互联网上传打印需求,云服务器接受打印需求后......
  • Python中的"e"表示什么意思
    在Python编程语言中,"%e"是一种格式化字符串的方式,用于将浮点数按指数形式输出。本文将详细介绍"%e"的使用方法以及示例。1."%e"格式化字符串的语法在Python中,可以使用"%e"来定义一个格式化字符串,用于将浮点数按指数形式输出。其语法如下:```python"%e"%value```其中,`%e`表示将浮点......
  • Python中的"%s"表示什么意思
    在Python编程语言中,"%s"是一种格式化字符串的方式,用于将字符串按照指定格式输出。本文将详细介绍"%s"的使用方法以及示例。1."%s"格式化字符串的语法在Python中,可以使用"%s"来定义一个格式化字符串,用于将字符串按照指定格式输出。其语法如下:```python"%s"%value```其中,`%s`表示将......
  • 效果图渲染角度哪什么小技巧?10个效果图渲染技巧推荐
    在创建效果图渲染时,正确设置相机角度对于表现设计的视觉效果至关重要。好的效果图通常能够增强设计图张力,通过效果图也能更好的看到真实物体的成果,以下是一些效果图渲染角度技巧,可以帮助你提高渲染的质量和表现力,来看看吧!效果图渲染角度小技巧1、观察者视角:选择一个类似于真实......
  • 嵌入式工程师有什么热门的发展方向?
    随着5G的普及和物联网时代的到来,各种技术不断融合创新,嵌入式技术已成为互联网行业中具有前景的职业之一。嵌入式工程师在当今数字化时代拥有广泛的就业前景,新技术的发展也为嵌入式工程师提供了更多机会,给大家列举了四个嵌入式非常具有前景的发展方向:物联网、人工智能、工业自动化、......
  • 网络割接为什么经常是半夜进行?
    你们好,我的网工朋友。假设你最近遇到了一个客户,客户有个新的园区刚刚建成,园区内包括建筑物若干,地理覆盖面也较广,园区建成后,肯定是需要一个专用网络的,用于承载公司的业务流量。这时候,就需要一个大规模的园区网络来承载电子化的业务交互数据。那么,如果网络在运行一段时间后,随着公司发......
  • 光缆的构成包括什么?
    光缆是由一根或多根光纤或光纤束组成,具有符合化学、机械和环境要求的结构。光缆的构成一般可分为缆芯、加强元件和护层三个部分,无论其结构形式如何。缆芯光缆的芯线结构应满足以下基本要求:1.确保光纤在电缆内部保持最佳位置和状态,以保证光纤传输性能的稳定。当光缆受到拉伸、侧压等......