提问人:Ripley E 提问时间:10/25/2023 最后编辑:Mister JojoRipley E 更新时间:10/26/2023 访问量:65
如何定位 #shadow 根内的元素?
How to target element inside #shadow-root?
问:
我想更改 #shadow 根内部的显示样式,但在定位它时遇到了一些问题。第一个问题,是否可以通过CSS定位它?还是通过JS来做更好?
#retirement-services-modal #rs-two-col::shadow(.wrapper) {
display: flex;
align-items: center;
}
<div id="retirement-services-modal">
<sdf-layout-two-col id="rs-two-col">
#shadow-root
<div class="wrapper">
<div class="col-1">content goes here</div>
<div class="col-2">content goes here</div>
</div>
</sdf-layout-two-col>
</div>
我正在尝试以内部为目标添加一个和..wrapper
#shadow-root
display: flex;
align-items: center;
我试图用它来定位它,但这似乎不起作用。我也试过,但似乎也没有用。有没有其他方法可以通过CSS定位它?::shadow
::part
答:
0赞
Afzal K.
10/25/2023
#1
使用 JS 来定位和操作内容可能更有效、更容易。
const el = document.querySelector('#rs-two-col'); // access the outer element
const sh = el.shadowRoot; // access the shadow DOM of the element
sh.querySelector('.wrapper').style.cssText = 'display: flex; align-items: center;'; // access the nested element within the shadow DOM and change the CSS property of the element
评论
0赞
Danny '365CSI' Engelman
10/25/2023
适用于现有的 DOM 节点。但是,如果一个带有 a 的新节点进入 DOM 怎么办?那你打算如何改变呢?如果 Web 组件创建者给了你一个钩子(双关语),你就有了用 CSS 完成这一切的技术。.wrapper
part
0赞
Danny '365CSI' Engelman
10/26/2023
#2
下面是一个使用part
<style>
host-element::part(foo){
border:10px dashed green;
}
div {
border:20px solid red; /* not applied to shadowDOM */
}
</style>
<host-element>
<template shadowrootmode="open">
<style>
:host {
display: inline-block;
width: 100vw;
background:hotpink;
}
.wrapper {
text-align:center
}
</style>
<div part="foo" class="wrapper">
<slot></slot>
</div>
</template>
<h2>LightDOM content slotted in shadowDOM</h2>
</host-element>
注意:上面的声明式 shadowDOM 表示法在 FireFox 中尚不可用:
https://caniuse.com/declarative-shadow-domshadowrootmode
评论
::shadow
:part()
style