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

  • 相关阅读:
    golang reflect知识集锦
    go test benchmark
    go build -tags 的使用
    golang http 服务器的接口梳理
    go中如何更好的迭代
    滚动条css实现
    记vue nextTick用到的地方
    捕获Ctrl + C中断 优雅的退出程序 golang
    如何处理动态JSON in Go
    golang实现参数可变的技巧
  • 原文地址:https://www.cnblogs.com/connie313/p/13818118.html
Copyright © 2011-2022 走看看