参考链接:点我

一、什么是Shadow DOM

Shadow DOM,直接翻译的话就是 影子 DOM,可以理解为潜藏在 DOM 结构中并且我们无法直接控制操纵的 DOM 结构。类似于下面这种结构

Shadow DOM 可以在浏览器中生成一个独立于DOM树之外的 DOM结构

二、Shadow DOM的结构

1、Shadow host:相当于存放Shadow DOM的容器

2、Shadow root:Shadow DOM的根,它和它的后代元素,都将对用户隐藏,但是它们是实际存在的,在 chrome 中,我们可以通常审查元素去查看它们的具体 DOM 实现。

3、contents:Shadow DOM的具体内容

三、如何创建使用Shadow DOM

1、创建

function createShadowDOM(elem) {// var root = elem.createShadowRoot() //已被attachShadow替换var root = elem.attachShadow({mode:"open"})// mode为open时对外可以访问root.appendChild(createComponent("costom-component"))// 自定义标签}

2、使用

<div id="div">这里是不显示出来的,如果你看到了,说明浏览器不支持ShadowDOM</div>
createShadowDOM(document.querySelector("#div"))

3、获取Shadow DOM

document.querySelector('#div').shadowRoot

四、用途

1、在编写插件时,需要向DOM中插入新的DOM,但又怕样式或者DOM发生冲突,Shadow DOM的样式以及结构都是对外分开,不会溢出,外部的亦不会侵入

2、登其他自己去发现

五、优缺点

优点:

1、可封装复用

2、不会增加DOM的结构

3、样式独立

缺点:

1、兼容性差

2、不易调试或检查

七、自定义标签

自定义元素:点我

使用es6的class写法,继承 HTMLElement,使用connectedCallback添加方法,使用attributeChangedCallback做属性的改变

注:自定义标签的名称必须是包含一个破折号( - ),并且不能有大写字母

class CustomElement extends HTMLElement {constructor() {super()this._name = 'Custom'}connectedCallback() {this.addEventListener('click', e => alert(`Hello, ${this._name}!`));}attributeChangedCallback(attrName, oldValue, newValue) {if (attrName === 'name') {if (newValue) {this._name = newValue} else {this._name = 'Custom'}}}}CustomElement.observedAttributes = ['name']customElements.define('costom-component', CustomElement)

  

转载于:https://www.cnblogs.com/detanx/p/ShadowDOMCustom.html

Shadow DOM及自定义标签相关推荐

  1. Shadow DOM 样式隔离 js沙箱

    这种方法可能适用于中台这种嵌套其他子应用的场景,目前没遇到其他使用场景或有更好的解决方案 在线demo 不管是link导入的样色还是<style>标签样色都可以被隔离,不影响shadow ...

  2. 理解Shadow DOM

    1. 什么是Shadow DOM? Shadow DOM 如果按照英文翻译的话可以理解为 影子DOM, 何为影子DOM呢?可以理解为一般情况下使用肉眼看不到的DOM结构,那如果一般情况下看不到的话,那 ...

  3. [译] 用 Shadow DOM v1 和 Custom Elements v1 实现一个原生 Web Component

    原文地址:Make a Native Web Component with Custom Elements v1 and Shadow DOM v1 原文作者:Pearl Latteier 译文出自: ...

  4. Shadow DOM系列1-简介

    为什么80%的码农都做不了架构师?>>>    英文链接:Shadow DOM: Introduction, 26 AUGUST 2013 on Web Components, Sh ...

  5. Chrome 53 支持 Shadow DOM 等规范

    上周发布的 Chrome 53 带来了一系列实验性规范的支持,如Shadow DOM,它为复杂网页的开发提供便利.同时,针对移动平台,Chrome 53也提供了PaymentRequest接口.自定义 ...

  6. Chrome 53 支持Shadow DOM、PaymentRequest等规范

    上周发布的 Chrome 53 带来了一系列实验性规范的支持,如Shadow DOM,它为复杂网页的开发提供便利.同时,针对移动平台,Chrome 53也提供了PaymentRequest接口.自定义 ...

  7. js 创建自定义标签

    原理: 自定义标签是通过定义class类继承HTMLElement实现的, class特性是ECMAScript6中引入的特性, ES6以下没有这个特性 class 不是新的对象继承模型,它只是原型链 ...

  8. html5创建自定义标签,在html中创建自定义标签

    创建并使用自定义标签 Web Components 标准非常重要的一个特性是,它使开发者能够将HTML页面的功能封装为 custom elements(自定义标签),本篇介绍使用 CustomElem ...

  9. html5 shadow dom,Shadow DOM入门

    1.什么是shadow dow? html5的两个媒体api: audio 和 vedio:我们在使用的时候经常会感到疑惑,为什么引入一个vedio标签呈现出来的会是一个挺丰富的页面呢? 复制代码 接 ...

最新文章

  1. Windows上也能用Swift编程了,官方编译工具安装包现已上线
  2. Java8 forEach
  3. 解决Ubuntu下gedit中文乱码
  4. 洛谷U4807抽水机[最小生成树]
  5. Java里面获取当前服务器的IP地址
  6. MEGA 视频目标检测 数据集 : ILSVRC2015 VID 说明
  7. Qt Creator调试Qt Quick示例应用程序
  8. 部署zookeeper分布式节点
  9. 解释spring,struts,hibernate优缺点
  10. 认识Web.config文件
  11. mysql 事务实例_mysql实现事务的提交和回滚实例
  12. nyist 17 -----记忆式搜索------Accept
  13. laravel使用php artisan migrate 报错 SQLSTATE[42000]的解决方式
  14. mysql dr模式_DR模式下的mysql (abb读写分离)
  15. 关于u-boot中的.balignl 16,0xdeadbeef的理解
  16. 在线部署web项目(适用于较大型项目)
  17. IOConsole Updater 报错解决办法
  18. Kotlin — 适用于Android 开发
  19. Mac打不开TXT文件怎么解决?
  20. 2019 CCF 推荐 期刊 列表

热门文章

  1. what??|诞生才一年的BCH竟面临硬分叉的抉择
  2. vue element-ui 的奇怪组件el-switch
  3. (原创)SpringBoot入门
  4. 那天有个小孩跟我说LINQ(四)
  5. 目前个人计算机使用的电子电路主要是,计算机基础知识理论题库.xls
  6. micropython esp8266教程_(一)ESP8266/nodemcu如何使用MicroPython进行开发
  7. 隐马尔可夫模型 HMM 原理及实现
  8. MFC处理回车窗口消失
  9. 少儿编程150讲轻松学Scratch(十二)-Scratch编程算法练习-选择排序
  10. 备份ad_IT管理公开课——备份恢复解决方案