提问人:Philipp Koch 提问时间:9/18/2023 最后编辑:corn on the cobPhilipp Koch 更新时间:9/20/2023 访问量:61
仅选择悬停的级别,而不选择其父级或子级
Select only level being hovered, but not its parents or children
问:
(我知道已经有无数的CSS选择器问题,但不幸的是,我找不到这个问题的答案;所以请耐心等待。
我有具有以下属性的 HTML:
- 某些节点将始终可见。它们可以嵌套。
- 这些节点中的每一个始终只有一个“信息子节点”,该节点仅在其父节点悬停时显示。(可能还有其他非信息子节点,因为这些子节点可以嵌套)。
- 我只想以独占方式显示当前悬停节点的信息。
示例(下面是一个 JSFiddle):
.always-visible {
display: block;
}
.info-on-parent-hover {
background-color: #ddd;
font-weight: normal;
font-style: italic;
display: none;
}
.always-visible {
font-weight: bold;
background-color: #777;
}
.always-visible:hover {
background-color: #3377cc;
}
.always-visible:hover>.info-on-parent-hover {
display: block;
}
<div class="always-visible">
node A [top-level node]
<div class="info-on-parent-hover">some info about A</div>
</div>
<div class="always-visible">
node B [top-level node]
<div class="info-on-parent-hover">some info about B</div>
<div class="always-visible">
node C [child node of B]
<div class="info-on-parent-hover">some info about C</div>
</div>
<div class="always-visible">
node D [child node of B]
<div class="info-on-parent-hover">some info about D</div>
</div>
</div>
到目前为止,这或多或少是有效的,但我的目标是一次只显示一个“信息节点”(即属于其父节点的节点)。所以:
如何只选择当前悬停其父级的 div class=“.info-on-parent-hover”
(而不是其祖先、兄弟姐妹或后代的父级;即当节点 D 悬停时,节点 B 的信息也不得同时显示)?
答:
1赞
himanshu
9/19/2023
#1
你犯了一个基本错误:你徘徊的父母有一个孙子;只需创建一个同级悬停条件,它就可以工作 JSfiddle 链接
.always-visible {
display: block;
}
.info-on-parent-hover {
background-color: #ddd;
font-weight: normal;
font-style: italic;
display: none;
}
.always-visible {
font-weight: bold;
background-color: #777;
}
.always-visible .text-to-hover:hover {
background-color: #3377cc;
}
.always-visible .text-to-hover:hover + .info-on-parent-hover {
display: block;
}
<div class="always-visible">
<div class="text-to-hover">
node A [top-level node]</div>
<div class="info-on-parent-hover">some info about A</div>
</div>
<div class="always-visible">
<div class="text-to-hover">
node B [top-level node]
</div>
<div class="info-on-parent-hover">some info about B</div>
<div class="always-visible">
<div class="text-to-hover">
node C [child node of B]
</div>
<div class="info-on-parent-hover">some info about C</div>
</div>
<div class="always-visible">
<div class="text-to-hover">
node D [child node of B]</div>
<div class="info-on-parent-hover">some info about D</div>
</div>
</div>
评论
1赞
Heretic Monkey
9/19/2023
使用“复制代码片段来回答”按钮将代码(适用于本网站)复制到您的答案中。
1赞
Ronak Shah
9/19/2023
#2
添加以下 CSS 选择器:
.info-on-parent-hover:has(~ .always-visible:hover) {
display: none;
}
此选择器可在悬停同级元素时有效地隐藏元素。但是,需要注意的是,并非所有浏览器都支持伪类,因此其使用可能会受到限制。在不支持它的浏览器中,您可能需要使用基于 JavaScript 的解决方案。.info-on-parent-hover
.always-visible
:has()
评论
0赞
Philipp Koch
9/19/2023
谢谢你的解决方案!对我来说,重要的是不要排除Firefox用户(或者任何用户,如果可能的话),所以这里不是一个选项,但了解这种可能性是件好事。
评论
>
)?.always-visible:hover > .info-on-parent-hover
D
B
:hover
B
body
html