css样式隔离

使用 浏览器的api实现,有个缺点 如果挂载到body上就会产生一些影响

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. </head>
  8. <body>
  9. <div>
  10. <p>孤独的p</p>
  11. <div id="shadow"></div>
  12. </div>
  13. <p>审查元素的时候就会看到 shadowDOM是 名为shadow的影子,外界是无法访问的的</p>
  14. </body>
  15. </html>
  16. <script>
  17. /**
  18. * css 样式隔离
  19. */
  20. // open 外界可以访问 closed 外界不能访问
  21. let shadowDOM = document.getElementById('shadow').attachShadow({ mode: 'closed' });
  22. // 外界无法访问的shadow dom
  23. let pEl = document.createElement('p');
  24. pEl.innerHTML = "shadowDOM";
  25. let styleEl = document.createElement('style');
  26. styleEl.textContent = `
  27. p{color:red}
  28. `
  29. shadowDOM.appendChild(styleEl);
  30. shadowDOM.appendChild(pEl);
  31. // 纯在一个问题 ,如果把这些放到body上后 就会有影响
  32. // document.body.appendChild(pEl)
  33. </script>