zoukankan      html  css  js  c++  java
  • Shadow dom

    通过shadow dom,可以将子树渲染到另一颗树里。 隔离css, 选择性隔离html显示,实现dom封装。与template不同的是, shadow dom其实渲染了, 但是template没有渲染。

    <body><div id="foo">hahaha</div></body>

    document.querySelector('#foo').attachshadow({mode: 'open'}).innerHTML('<div><slot></slot></div>'); 最终slot会被替换成hahaha, 结果是<body><div id="foo"><div>hahaha</div></div></body>

    插槽内容将会被替换。 也可以给插槽名字

    <div><p slot="foo"></p></div>

    document.querySelector('#foo').attachshadow({mode: 'open'}).innerHTML('<div><slot name="foo"></slot></div>'); 通过这样写的p元素其实还在body->div里面, 这个只是投射。

    因为隔离里, 所以shadow dom里面的css会被隔离。里面的元素也不会被query到, 在dom里面是一个#shadom-host这样的document。

    可是时间会被冒泡出去。

    书中的例子:

    for(let color of ['red', 'green', 'yellow']){

      const divElment = document.createElement('div');

      divElement.innerText = `mak eme ${color}`;

      divElmenet.attachShadow({mode: open}).innerHTML = `<p><slot></slot></p>`;

      <Style>p{color: ${color}}<style>

    }

    这就是为什么<input type="range"/>里面有拖拽, 可是getElementsByTagName('input')[0].firstChild为空, 因为通过shadom dom隔离了, 样式可以通过伪元素控制。

    这也是微前端框架隔离的思路, qiankun.com

  • 相关阅读:
    「疫期集训day7」周期
    「字符串」哈希板子
    「疫期集训day6」雨林
    「疫期集训day5」火焰
    「数据结构」对顶堆
    「STL中的常用函数 容器」
    「单调队列优化DP」P2034 选择数字
    bootstrap table使用及遇到的问题
    ArcGIS栅格影像怎么从WGS84地理坐标转成Xian80投影坐标
    arcgis如何求两个栅格数据集的差集
  • 原文地址:https://www.cnblogs.com/connie313/p/13818118.html
Copyright © 2011-2022 走看看