首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CSS阴影区:有替代/deep选择器吗?

CSS阴影区:有替代/deep选择器吗?
EN

Stack Overflow用户
提问于 2018-06-25 19:14:44
回答 1查看 4.1K关注 0票数 2

据我所知,不推荐使用/deep选择器来选择影子多姆子。所以我在寻找另一个解决方案。

CSS范围界定希望为升序选择器提供解决方案,但不为下行选择器提供解决方案。

考虑到这一点:

代码语言:javascript
复制
<script>
    $('.child').addClass('reached');
</script>
<div id="parent">
    #shadow-root
        <div class="child"></div>
    /shadow-root
</div>

如何在脚本中编写选择器以到达.child元素?

谢谢你的帮助

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-26 10:00:12

如何在脚本中编写选择器以到达.child元素?

要到达Shadow中的元素,应该在元素上使用shadowRoot属性。

代码语言:javascript
复制
var parent = document.querySelector( '#parent' )
var child = parent.shadowRoot.querySelector( '#child' )
child.classList.add( 'reached' )

注意:阴影DOM必须是在开放模式下创建的。

代码语言:javascript
复制
var sh = parent.attachShadow( { mode: 'open' } )

代码语言:javascript
复制
var parent = document.querySelector( '#parent' )
var sh = parent.attachShadow( { mode: 'open' } )
sh.innerHTML = `<style>
                    div.reached { color: green }
                </style>
                <div id="child">Child</div>
                `
var child = parent.shadowRoot.querySelector( '#child' )
child.classList.add( 'reached' )
代码语言:javascript
复制
<div id="parent">
</div>

注意:只有在使用::slotted显示的轻型DOM中有元素时,才需要使用<slot>

是否有替代/deep选择器?

简短的回答是否定的。由于Shadow DOM的目标是将Shadom DOM与主页隔离开来,所以/deep是一种异端。

带有::part::theme伪元素的::part可以返回一些控制权,但它不会很快实现。

在此之前,主要的解决办法是使用CSS自定义属性

但是,这2种解决方案必须由Web组件设计器实现,否则不能过度使用。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51030458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档