我正在尝试在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
不适用于元素(的一部分)?我希望听到想法或建议。
[不确定这是否是您要寻找的,但是关于第一个问题(红色div,悬停时蓝色),您可以缩短div height
并使用border-bottom
来弥补丢失的高度:
div {
width: 100px;
height: 50px; /* instead of 100px */
background: red;
margin-bottom: -50px;
position: relative;
z-index: 1;
border-bottom: 50px solid red; /* adds 50px to divs apparent height, but ignored at hover */
}