css - 有没有人创建了一个 Shadow DOM 来阻止样式表从 IE 11 或 Edge 中的 Shadow DOM 渗出/泄漏?

标签 css web-component shadow-dom

我需要一个 Web 组件,它不允许样式从 IE 11 或 Edge 中的 Shadow DOM 溢出。内联样式可以工作,但我需要使用样式表。

我已经尝试了一切,包括标准网络组件、聚合物/LiteElement、react-shadow-dom-component 和普通的旧 JS。我附加的代码非常基本。这个例子没有使用样式表,它仍然流血。我尝试了多个 polyfill。我也尝试过使用 defer 和 async 加载程序。非常感谢任何帮助。

<!DOCTYPE html>
<html>
<head>

<meta charset="utf-8">
<title>hello-world</title>

<!-- Imports polyfill -->
<!--<script src="../webcomponentsjs/webcomponents.min.js"></script>-->
<script src="/node_modules/@webcomponents/webcomponentsjs/webcomponents- 
bundle.js"></script>
<script src="https://unpkg.com/@webcomponents/webcomponentsjs@^2/"> 
</script>

<!--<script src="node_modules/custom-elements-es5-adapter/custom- 
elements-es5-adapter.js"></script>-->
<!-- Imports custom element -->
<!--<link rel="import" href="hello-world.html">-->
<!--<script src="shadowComponent.js"></script>-->
<style>

    .text {
        color: red;
    }
</style>

</head>
<body>

<div class="text">I should be red.</div>

<div id="myText"></div>

<script type="text/javascript">
    var element = document.getElementById('myText');
    var styles = '.text{color: blue; }';

    var content = 'I should be blue.';

    var style = document.createElement('style');
    style.type = 'text/css';
    style.appendChild(document.createTextNode(styles));

    var p = document.createElement('p');
    p.className = 'text';
    p.appendChild(document.createTextNode(content));

    var shadowRootContainer = element.attachShadow({ mode: 'open' });
    var innerContainer = document.createElement('div');
    shadowRootContainer.appendChild(innerContainer);

    var shadowRoot = innerContainer.attachShadow({ mode: 'open' });

    shadowRoot.appendChild(style);
    shadowRoot.appendChild(p);

</script>
</body>
</html>

在这个例子中有一个嵌套的 Shadow DOM,因为我束手无策,决定把一些代码扔到墙上看看是否有任何东西会粘住。我知道顺序对样式很重要。我希望使用 polyfill 这应该可以工作。它适用于 Chrome(显然)FF 和 Opera。如有必要,我有更复杂的例子。再次感谢您的帮助。

最佳答案

IE11 或 Edge(pre-chromium)中没有 shadowDOM。所以没有内置的方法来防止 shadowDOM 渗透。

如果您使用 BEM 之类的东西或其他方式来命名您的 CSS 选择器,您可以限制渗透。

关于css - 有没有人创建了一个 Shadow DOM 来阻止样式表从 IE 11 或 Edge 中的 Shadow DOM 渗出/泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56029958/

相关文章:

javascript - 多个 Polymer Web 组件在 Firefox 中失败

javascript - 为自定义元素加载 polyfill 的最佳方式是什么?

javascript - React 组件的 Material UI 主题不局限于 Shadow DOM

javascript - 在被光 DOM 中的元素(不是父元素)覆盖的影子 DOM 元素上触发事件

python - 部署到移动设备或台式计算机之间的 aws elastic beanstalk 的 django 网站有区别吗?

javascript - 我的 View 似乎没有看到我的css,js。我使用 spring boot 和 thymeleaf

css - 没有行高的垂直对齐文本内部 div

css - 2个div彼此相邻,不使用宽度

javascript - 如何在 Microsoft Edge 44 或更早版本中使用 polyfill?

angular - Angular 2 使用 Shadow DOM 还是虚拟 DOM?