2017-02-28 46 views
1

我应该说,我真的没有,我正在努力工作,通过一个问题开始。我对Shadow Dom和CSS3 :target选择器可能/应该/当前如何一起工作感兴趣。阴影大教堂和CSS3:目标选择

我知道HTML规范说,应该永远只能是一个有效的HTML文档中的特定ID值的一个要素。但是当我们开始使用带有阴影dom的webcomponents时,我们可以很容易地使用具有相同ID的多个元素来发现自己。当我们在同一页面中多次使用相同的组件时,情况尤其如此。所以,问题是我是这样的:应该发生到具有相匹配的当前哈希和其风格与:target规则的ID值阴影DOM区域内的要素是什么?

例如,如果我写了一个WebComponent的包含

<style> 
#debug {display:none} 
#debug:target { display:block; background-color:yellow; border 2px solid red; } 
</style> 
<div id="debug">some debug data</div> 

应该发生在我的元素的所有实例,我把一个页面上,并导航到#调试什么(我的元素)?每个组件中的调试元素应该显示?他们都不应该显示?应该只显示第一个元素的调试div(我期望浏览器尝试导航到的那一个)?

我的意见是,如果页面没有与任何滚动导航应该出现在页面上的ID=debug值的元素。由于影子dom与页面的其余部分是独立的,因此浏览器不应该尝试导航到嵌套在shadow dom中的这样一个元素。每个my-element实例都应该能够看到当前页面的URL,并且应该应用任何匹配:目标规则,以便每个my-elements的调试div都应该可见。

如果这是它将使用于所有组件的共享页面的状态,如上面的调试的实例一些有趣的可能性的情况下。不过,我怀疑Chrome是如何实现这些目标的。而且我很确定这个Shadow Dom填充不会正确地处理事情,因为它基本上将所有东西都塞进了页面的Dom树中,并且会破坏html规范。

如果任何人有这个应该怎么工作的一个答案,它目前的工作方式......

(从我的电脑编辑,以添加格式...很难从我的手机做)

回答

2

只是好奇我认为你可以像嵌套文档一样看到阴影DOM。 CSS无法处理来自外部的阴影DOM中的元素(先前存在的阴影穿透CSS选择器已被弃用)。 这也封装ID和因此包含与ID的元件将不导致冲突或重复的多个组件。

如果您在组件样式中有:target选择器的CSS,它应该能够使用匹配的id来寻址元素,否则它不应该。