有CSS,包括position: absolute;包含到容器节点

have CSS, including position: absolute; contained to a container node

如何将 CSS,包括 position: absolute; 包含到容器节点中?即带有 position: absolute 的元素应该位于容器节点的左上角,而不是整个文档的左上角。 相当于 iframe

使用阴影 DOM 隔离 styleNode 中的 CSS 的示例代码,这是我无法控制的:

test.html

<html>
<body>
<div>this should still be visible and not affected by container styling</div>

<div id="container"></div>


<script>
    let container = document.querySelector('#container')
    const shadow = container.attachShadow({mode: 'open'}); 
    const styleNode = document.createElement('style');
    styleNode.textContent = `
    div {
        background: blue;
        font-size: 32px;
        position: absolute;
        top: 0;
        left: 0;
    }
    `;

    shadow.appendChild(styleNode);
    const contentNode = document.createElement('div');
    contentNode.textContent = `Hello World`;
    shadow.appendChild(contentNode);
</script>
</body>
</html>

想要的结果: 'Hello World' 显示在 'this should still be visible' 下面,而不是在它上面。

绝对定位是相对于第一个向上的祖先发生的,它本身有一个位置集。

如果找不到这样的显式定位,则默认使用 body 元素。

如果您给父元素定位,则相对定位将与其相关。

<html>
<body>
<div>this should still be visible and not affected by container styling</div>

<div id="container"></div>


<script>
    let container = document.querySelector('#container')
    const shadow = container.attachShadow({mode: 'open'}); 
    const styleNode = document.createElement('style');
    styleNode.textContent = `
    div {
        background: blue;
        font-size: 32px;
        position: absolute;
        top: 0;
        left: 0;
    }
    `;

    shadow.appendChild(styleNode);
    const contentNode = document.createElement('div');
    contentNode.textContent = `Hello World`;
    shadow.appendChild(contentNode);
</script>
</body>
</html>