CSS 中的悬停和 JavaScript 中的可见性不兼容吗?
Are hover in CSS and visibility in JavaScript not compatible?
所以,我有一个图标。当我将鼠标悬停在图标上时,如果我将鼠标悬停在图标上,则会显示工具提示。
HTMl是:
<i class="fa fa-info-circle infoIcon">
<span class="tooltip">
<span class="tooltipClose">x</span><br>
<p>some text</p>
</span>
而 CSS 是
.infoIcon:hover {
.tooltip {
visibility: visible;
opacity: 1;
}
}
现在,如果我将鼠标悬停在标有 class“infoIcon”的图标上,将显示工具提示。如果我将鼠标悬停在图标外,工具提示就会消失。但是,工具提示上有一个关闭按钮,标签为 class、“tooltip”。如果我点击它,工具提示需要消失。
为此,我使用了 jQuery:
$(".tooltipClose").click(function (e) {
$(this).closest(".tooltip").css("visibility", "hidden");
});
如果单击关闭按钮,工具提示将消失。但是问题是,如果我再次将鼠标悬停在图标上,工具提示将不会再次显示。我知道这是因为我将工具提示的可见性设置为隐藏在 jQuery 中。我该如何解决这个问题,以便在单击按钮并将鼠标悬停在图标外时关闭工具提示?
您可以侦听 mouseleave
事件并将 css 设置回空,因为内联样式将优先于样式表,因此您需要设置 属性回到它应该的样子:
$(".tooltipClose").click(function (e) {
$(this).closest(".tooltip").css("visibility", "hidden");
$(this).closest(".tooltip").one("mouseleave", function() {
$(this).css("visibility", "");
});
});
如果 tooltip
是 bootstrap 一个,JQuery 应该支持工具提示功能,因此要关闭其中一个,您应该执行以下操作:
$(this).closest(".tooltip").tooltip("hide");
您正在使用的 jquery 方法 .css()
将样式应用于标记本身作为属性。
因此 attribute/inline 样式首先优先考虑外部/内部样式表中的悬停样式。
所以你应该做的是切换工具提示的 class 或 属性。
Tooltip -> meant for show on hover and hide on mouseleave.
Popover -> meant for staying and act on close button click.
但是如果您想要 close button
单击作为选项,那么 mouseleave 不是最佳解决方案。
$(".tooltip").parent().on('mouseover', function() {
$(".tooltip").hide();
$(this).find('.tooltip').show();
})
$(".tooltip").find('.tooltipClose').on('click', function() {
$(this).parent().hide();
})
.infoIcon, .text {
position: relative;
margin-top: 50px;
border: 1px solid red;
}
.tooltip {
position: absolute;
top: -10px;
display: none;
background: #22222240;
width: 200px;
}
.tooltipClose {
display: inline-block;
width: 100%;
text-align: right;
cursor: pointer;
margin-right: 10px;
}
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<i class="fa fa-info-circle infoIcon">
<span class="tooltip">
<span class="tooltipClose">x</span><br>
<p>some text</p>
</span>
</i>
<div class="text">
Another Text (i)
<span class="tooltip">
<span class="tooltipClose">x</span><br>
<p>some tooltip</p>
</span>
</div>
所以,我有一个图标。当我将鼠标悬停在图标上时,如果我将鼠标悬停在图标上,则会显示工具提示。
HTMl是:
<i class="fa fa-info-circle infoIcon">
<span class="tooltip">
<span class="tooltipClose">x</span><br>
<p>some text</p>
</span>
而 CSS 是
.infoIcon:hover {
.tooltip {
visibility: visible;
opacity: 1;
}
}
现在,如果我将鼠标悬停在标有 class“infoIcon”的图标上,将显示工具提示。如果我将鼠标悬停在图标外,工具提示就会消失。但是,工具提示上有一个关闭按钮,标签为 class、“tooltip”。如果我点击它,工具提示需要消失。
为此,我使用了 jQuery:
$(".tooltipClose").click(function (e) {
$(this).closest(".tooltip").css("visibility", "hidden");
});
如果单击关闭按钮,工具提示将消失。但是问题是,如果我再次将鼠标悬停在图标上,工具提示将不会再次显示。我知道这是因为我将工具提示的可见性设置为隐藏在 jQuery 中。我该如何解决这个问题,以便在单击按钮并将鼠标悬停在图标外时关闭工具提示?
您可以侦听 mouseleave
事件并将 css 设置回空,因为内联样式将优先于样式表,因此您需要设置 属性回到它应该的样子:
$(".tooltipClose").click(function (e) {
$(this).closest(".tooltip").css("visibility", "hidden");
$(this).closest(".tooltip").one("mouseleave", function() {
$(this).css("visibility", "");
});
});
如果 tooltip
是 bootstrap 一个,JQuery 应该支持工具提示功能,因此要关闭其中一个,您应该执行以下操作:
$(this).closest(".tooltip").tooltip("hide");
您正在使用的 jquery 方法 .css()
将样式应用于标记本身作为属性。
因此 attribute/inline 样式首先优先考虑外部/内部样式表中的悬停样式。
所以你应该做的是切换工具提示的 class 或 属性。
Tooltip -> meant for show on hover and hide on mouseleave.
Popover -> meant for staying and act on close button click.
但是如果您想要 close button
单击作为选项,那么 mouseleave 不是最佳解决方案。
$(".tooltip").parent().on('mouseover', function() {
$(".tooltip").hide();
$(this).find('.tooltip').show();
})
$(".tooltip").find('.tooltipClose').on('click', function() {
$(this).parent().hide();
})
.infoIcon, .text {
position: relative;
margin-top: 50px;
border: 1px solid red;
}
.tooltip {
position: absolute;
top: -10px;
display: none;
background: #22222240;
width: 200px;
}
.tooltipClose {
display: inline-block;
width: 100%;
text-align: right;
cursor: pointer;
margin-right: 10px;
}
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<i class="fa fa-info-circle infoIcon">
<span class="tooltip">
<span class="tooltipClose">x</span><br>
<p>some text</p>
</span>
</i>
<div class="text">
Another Text (i)
<span class="tooltip">
<span class="tooltipClose">x</span><br>
<p>some tooltip</p>
</span>
</div>