首页 > 编程语言 >简单理解slot算法和shadow DOM

简单理解slot算法和shadow DOM

时间:2022-10-07 23:04:19浏览次数:52  
标签:slot web DOM tree shadow Shadow

阅读完这篇博客你会有以下收获:

  • slot算法是什么?
  • shadow DOM是什么?
  • vue slot机制与w3c web component 规范的 shadow DOM渲染结果有何异同?

简单理解slot算法和shadow DOM_前端

slot算法

The slotting algorithm assigns nodes of a shadow tree host into slots of that tree.

InputHOST -- a shadow tree host Output All child nodes of HOST are slotted

  1. LetTREEbeHOST's shadow tree
  2. LetDEFAULTbe an empty list of nodes
  3. For each child nodeNODEofHOST, in tree order:
  4. LetNAMEbeNODE'sslot name
  5. IfNAMEis missing, addNODEtoDEFAULT
  6. LetSLOTbe the slot withslot nameNAMEforTREE
  7. IfSLOTdoes not exist, discard node
  8. Otherwise, assignNODEtoSLOT
  9. LetDEFAULT-SLOTbe the thedefault slotforTREE
  10. IfDEFAULT-SLOTdoes not exist,stop
  11. Otherwise, assign all nodes inDEFAULTtoDEFAULT-SLOT.

When each node is assigned to a slot, this slot is also added to the node's ​​destination insertion points​​ list.

这是w3c web components规范的一个提案,地址位于​​github.com/w3c/webcomp…​

在这个提案中,我们发现shadow DOM和shadow Tree这两个概念,关于它们的规范,在这里:​​w3c.github.io/webcomponen…​

mdn上关于shadow DOM的一篇特别好的文章:​​developer.mozilla.org/en-US/docs/…​

Shadow DOM : attach a hidden separated DOM to an element.

几个shadow DOM的专业术语:

  • Shadow host: shadow DOM要连接的普通DOM节点。
  • Shadow tree: shadow DOM里的DOM树。
  • Shadow boundary: Shadow DOM结束的地方,也是普通DOM开始的地方。
  • Shadow root:shadow tree的根节点。

Shadow DOM知识点:

  • shadow DOM和普通DOM一样可以添加子节点设置属性,但是shadow DOM内部的代码不能影响到外部的任何东西。
  • shadow DOM其实一直都在用,例如标签,封装了很多按钮,这就是shadow DOM。
  • 两种模式mode:open,closed。属于包含了shadow DOM的内建标签,它的mode就是closed,外部不能通过shadowRoot获取到这个标签的shadow DOM。open模式更适用。

shadow DOM的作用是什么:增强组件内聚性

An important aspect of web components is encapsulation — being able to keep the markup structure, style, and behavior hidden and separate from other code on the page so that different parts do not clash, and the code can be kept nice and clean.

vue demo: component.vue -> shadow host

<slot></slot>
<slot name="foo"></slot>
<slot name="bar"></slot>

page.vue -> shadow Tree

<span>+</span>
<span slot="foo">-</span>
<span slot="bar">2</span>
<span slot="bar">3</span>

渲染结果:

简单理解slot算法和shadow DOM_github_02

渲染结果与slot算法十分契合,但是较为奇怪的是,vue的slot机制,不会生成像w3c web component 的shadow DOM。

web component shadow DOM是下面这样:

简单理解slot算法和shadow DOM_github_03

  • 微信公众号: 大大大前端

标签:slot,web,DOM,tree,shadow,Shadow
From: https://blog.51cto.com/u_15725382/5735199

相关文章

  • Vue阻止点击其他DOM节点失去输入框焦点
    <[email protected]="comfirm"><u-buttonsize="medium"type="primary">确定</u-button></view>mousedown事件使用capture修饰符配合prevent......
  • qt5--QRandomGenerator随机数类
     win.h#ifndefWIN_H#defineWIN_H#include<QWidget>#include<QRandomGenerator>//随机数类#include<QDebug>classWin:publicQWidget{Q_OBJE......
  • 03#用户管理:passwd 以及 shadow 文件
    前言passwd和shadow两个文件是用于存储用户信息的文件,包括用户名、用户ID、组ID、主目录路径等信息。userdel指令不加任何选项删除的就是这两个文件中的信息。passwd......
  • day09 --> 【JavaScript(BOM、DOM事件)】
    DOM简单学习:为了满足案例要求功能:控制HTML文档的内容代码:获取页面标签(/亦叫元素)对象Elementdocument.getElementById("id值");通过元素的id值获取元素对象操作Elemen......
  • 2020ICPC沈阳I - Rise of Shadows
    剩余系Problem-I-Codeforces题意给定\(H,M,A\)\(2<=H,M<=10^9,\;0<=A<=\frac{H*M}2\)假设一个钟表有\(H\)小时,一小时有\(M\)分钟,求一天中有多少整数分钟,满......
  • 补档--【THM】Subdomain Enumeration(子域名枚举)-学习
    简介子域名枚举是为一个域查找有效子域的过程,在本节中我们将学习发现子域的各种方法,我们这样做是为了扩大我们的攻击面,试图发现更多潜在的漏洞点。我们将探讨三种不同的......
  • React循环DOM时为什么需要添加key
    一、React渲染流程和更新流程react渲染流程:jsx->虚拟dom->真实domreact更新流程:props/state改变->render函数重新执行->生成新的虚拟dom树->新旧虚拟dom树进......
  • 15DOM学习
    1<!doctypehtml>2<htmllang="en">3<head>4<metacharset="UTF-8">5<metaname="viewport"6content="width=device-width,user-scalab......
  • Linux上如何挂载EMC DataDomain BoostFS存储到本地目录
    Alwayskeepemptypartitionsatbothendsofthepartitionrange.Keepthepartitionsatbothendstoguaranteethatthepartitionsplitandthepartitionmerge......
  • React面试:谈谈虚拟DOM,Diff算法与Key机制
    1.虚拟dom原生的JSDOM操作非常消耗性能,而React把真实原生JSDOM转换成了JavaScript对象。这就是虚拟Dom(VirtualDom)每次数据更新后,重新计算虚拟Dom,并和上一次生成的虚拟......