html - 是否可以不触发:悬停在 ::before 或 ::after 上?
问题描述
我正在尝试在 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,悬停时蓝色),您可以缩短 divheight
并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 */
}
推荐阅读
- javascript - 使用croppie裁剪图像上传后如何检索裁剪图像
- daml - 如何使用 Ledger API - Python 版本获取已执行的合约 ID
- arrays - Shopify - 制作可用变体列表以供显示
- php - 我想从根路径 /index.php 重定向到 index.php?page=terms
- javascript - 取消夏令时 - 我是否正确保存日期时间?
- javascript - 即使语法正确,为什么函数也没有执行
- sql - SQL 计算自当月第一天以来每天的累积 Distinct 计数
- javascript - Google 缓存 api - 使用获取参数缓存 url
- bash - fzf tmux pasteb deleteb
- javascript - 使用 Polymer Templatizer 标记模板