【发布时间】:2020-08-08 06:57:21
【问题描述】:
我正在尝试在 CSS 中进行自定义工具提示实现,它工作得相当不错,但我遇到了一个问题。目前,将鼠标悬停在工具提示上仍会使工具提示保持打开状态,即使我没有将鼠标悬停在原始元素本身上。
当然,我尝试过::before:hover {display:none;} 之类的方法,但这不起作用,因为伪元素没有应用伪类。
我的下一个想法是简单地使工具提示不“占用”任何空间。使用负数margin-bottom 允许其他东西占用元素中的空间,就好像该元素不存在一样。但是,:hover 伪类显然仍然适用。
这是我想做的演示。我想让以下演示的工具提示不保持任何悬停状态。请注意,将工具提示文本移动到元素上方的上方不是一个有效的解决方案,因为向上移动光标的速度比蜗牛的速度更快会导致一些像素被跳过,这意味着工具提示“捕捉”光标并保持:hover在元素上。
[data-tooltip] {
position: relative;
cursor: default;
}
[data-tooltip]:hover::before {
content: attr(data-tooltip);
position: absolute;
top: -2px;
transform: translateY(-100%);
background: white;
border: 1px solid black;
}
<p>Spacer text</p>
<div data-tooltip="Example tooltip">Hover over me for a tooltip text</div>
如您所见,如果您将光标移到 div 上,则会出现工具提示,如果您慢慢向上移动光标,工具提示将消失。但是,如果您将光标向上移动的速度稍快一些,它将跳过 1 像素的间隙,并保持光标悬停在 div 上。
现在我正在寻找一些适用于[data-tooltip]::before 的样式,以便不会在其上触发光标的悬停事件(或者至少不在您看到工具提示的位置;如果我可以将其隐藏在 [ -1000, -1000] 也可以)
所以基本上,我的问题是,是否可以将 css 应用于一个元素,以便 :hover 不适用于(部分)元素?我很想听听想法或建议。
【问题讨论】:
-
如果我能以某种方式获得(部分)不触发
:hover的元素,那么我可以将这些样式应用于::before,这将解决我的问题。另外,正如我在问题中提到的,我特别想解决它,而不必在 div 顶部覆盖一些其他元素。在工具提示示例中,我不能在工具提示上叠加其他元素,否则它将不可见。 -
@MrLister 为了清楚起见,我删除了第一个示例,因为它可能只是分散了实际问题的注意力。
-
好的,我删除了我的评论。
标签: html css css-selectors hover tooltip