我有一个像这样的HTML页面:
<p></p>
<p></p>
<p></p>
<div></div>
<p></p>
<p></p>
<p></p>
<div></div>
并且这种模式仍在继续。
通常情况下,div元素不应显示:
div{display:none;}
但是当一个段落悬停时,应该显示之后的第一个div元素:
p:hover+div{display:block;}
但这仅适用于之前的p
。而这:
p:hover~div{display:block;}
显示悬停div
之后的所有p
,而不仅仅是之后的第一个。{/ p>
如何在悬停p
后显示第一个不相邻的div?
实际上我正在寻找像first-sibling
这样的选择器。
答案 0 :(得分:8)
您应该使用以下设置:
p:hover ~ div ~ div {
display:none;
}
这会在悬停段落后的第一个div
之后将所有div
的显示设置为无。
div {
display: none;
}
p:hover ~ div {
display: block;
}
p:hover ~ div ~ div {
display: none;
}
<p>p1</p>
<p>p2</p>
<p>p3</p>
<div>d1</div>
<p>p1</p>
<p>p2</p>
<p>p3</p>
<div>d2</div>
<p>p1</p>
<p>p2</p>
<p>p3</p>
<div>d3</div>
答案 1 :(得分:4)
没有&#34;第一兄弟&#34;选择器,但您可以使用this answer中描述的相同技术覆盖后续div
元素的样式:
div,
p:hover ~ div ~ div {
display: none;
}
p:hover ~ div {
display: block;
}
如果您不知道可以提前分隔p
元素的div
元素的最大数量,或者您不希望硬编码所需的所有相邻选择器,如Aaron&回答。
答案 2 :(得分:3)
您是否尝试过使用此功能:
div {
display: none;
background: blue;
color: #fff;
}
p:hover+div,
p:hover+p+div,
p:hover+p+p+div {
display: block;
}
&#13;
<p>lorem</p>
<p>lorem</p>
<p>lorem</p>
<div>Ipsum</div>
<p>lorem</p>
<p>lorem</p>
<p>lorem</p>
<div>Ipsum</div>
&#13;
答案 3 :(得分:0)
我会将块放在节标签之间。然后<p>
标记和<div>
标记来自同一元素的兄弟。此外,如果这些标签彼此属于它,也可以在标记中反映出来。
<section>
<p>hello</p>
<p>world</p>
<p>bar</p>
<div></div>
</section>
<section>
<p>hello</p>
<p>world</p>
<p>bar</p>
<div></div>
</section>
CSS
section p:hover~div{display:block;}