这个问题似乎与Can I target a :before or :after 伪元素与兄弟组合器相反?
在您的情况下,您不能将伪类应用于伪元素。这也意味着您不能选择仅在伪元素打开:hover
而不是其生成元素时应用样式。相反,您只能根据其生成元素的伪类状态选择一个伪元素,并且仅当该生成元素是选择器的主题时。
此外,如前所述,伪元素不是 DOM 的一部分。因此,类似于在我对上述问题的回答(上述链接中的解释)中,您无法在同一生成元素中相对于真实子元素访问伪元素:
a[href^="http"] img ~ :after
您不能选择相对于同一生成元素中的伪元素的真实元素:
.foo:after > div
所以总结一下,以下选择器不起作用的原因:
.foo:after:hover > div
是双重的:
伪元素不能有伪类状态,使得:after:hover
无效。
这里选择器的主题不是.foo
,而是div
,所以:after
不能应用于.foo
。因此,在将伪元素应用于另一个选择器之后尝试选择一个真实元素作为选择器的主题是没有意义的。
如果您真的不能在 on 上显示您div
的.foo:hover
,而是在另一个子元素上显示,那么您在不使用 JavaScript 的情况下解决此问题的唯一方法是在该元素.foo
之前(而div
不是之后)创建另一个真正的元素:
<div class="foo">
<div></div>
<div>Stuff</div>
</div>
这是因为没有先前的兄弟选择器;您可以使用的相邻兄弟选择器:after >
仅用于选择下一个兄弟:
.foo > div:first-child + div { display: none; }
.foo > div:first-child { /* rules */ }
.foo > div:first-child:hover + div { display: block; }