我试图使用tipsy
...向页面添加工具提示。所以我准备了下面发布的简单HTML示例 - tipsy
似乎运行,但不幸的是,当我鼠标悬停元素时,整个文档正文被推下来,这在视觉上非常恼人(另外,可以使焦点下的元素移动并丢失鼠标悬停);这可以在下面的gif上看到,在Ubuntu 14.04,Firefox 43上捕获:
我怎样才能防止这种情况"推动"在tipsy
元素上执行鼠标悬停时,整个文档是什么?
测试代码:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="pragma" content="no-cache"/>
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
<script type="text/javascript" src="../jquery-1.12.3.min.js"></script>
<script type="text/javascript" src="../jquery.tipsy.js"></script>
<link rel="stylesheet" type="text/css" href="../tipsy.css"/>
<style type="text/css">
#_help_refresh {
display:none;
}
</style>
<script type="text/javascript">
ondocready = function() {
// placeholder - nothing for now...
$("#_refresh").tipsy({fade: true, gravity: 's', html: true, title: function() {
return $("#_help_refresh").html();
}
});
}
$(document).ready(ondocready);
</script>
</head>
<body>
<h1>Testing tipsy ...</h1>
<div id="testholder">
<div>Some text here:</div>
<div>Some more text here:</div>
</div>
<span><img id="_refresh" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAABHNCSVQICAgIfAhkiAAAAQxJREFUOI2l1DtOA0EMBuBPiGMgUBo4AQWioEAkCCpuACUSuQLcgYI+4QJ0NAREkWOkiBBCPBraFLsU6w3L7uZFfsmSx2P/Y8/YQz1a6GKAUcggbAc1/pdlwxb6SGfIEzYi5gpJkWQP3+GYoIc2miFtPMdeinfcFNbjTHKSYZBOwhE+arKkUM4Qa1NIclzXEbUK5UzLJEd+JxWibii9JUjSVeyG090MkjOcysqvxShYm3NkNBErywSXiV5C31yWqB/6yT/iO7IuP2fx589xHDEJdnLjog3ZwFvE3Bc3FhmRfbyG7yfWyw7loX3Ahb9D++i3Ib+wPem0eb6RRHbBjSlZj3GIW9WPrROlVfADiJ5vX7sneXIAAAAASUVORK5CYII="/></span>
<span id="_help_refresh">Here is the help test that goes in the tooltip</span>
</body>
答案 0 :(得分:2)
通过Firebug和Firebug: How to inspect elements changing with mouse movements?来确定问题所在。
基本上,当页面加载时,<h1>
是<body>
中的第一个元素。 Firebug显示在这种情况下<h1>
的系统CSS是:
margin-block-end: 0.67em;
margin-block-start: 0.67em;
请注意,在这种情况下 - 首先<h1>
时,Firefox会自动禁用margin-block-start
;但是当其他元素出现在<h1>
之前时,Firefox会自动启用margin-block-start
。
所以,会发生什么:开始时我们有<body><h1>...
,然后发生鼠标悬停,tipsy
实际上插入<div>
作为<body>
的第一个孩子,并且因此我们有<body><div ... /><h1>...
;因此,<h1>
不再是第一个孩子了,所以它的margin-block-start
被启用了,所以这个&#34;下推&#34;内容变得可见。
最简单的修复 - 没有CSS或JS或任何东西 - 只是插入一个空的<div>
(或其他元素)作为<body>
的第一个孩子,即<h1>
的前面1}}:
...
<body>
<div></div>
<h1>Testing tipsy ...</h1>
...
然后,由于<h1>
不再是第一个孩子,因此从一开始就会启用margin-block-start
,因此tipsy
鼠标悬停在相应的div
后不会更改插入了。
答案 1 :(得分:1)
问题不在于您的HTML。这是插件。我运行代码并注意到该插件将工具提示附加到文档的顶部。这会导致新添加的DOM元素占据顶部的一些空间,从而导致其下方的每个其他元素向下移动几个像素:在tipsy.js
的第34行查看此代码:
$tip.remove().css({top: 0, left: 0, visibility: 'hidden', display: 'block'}).prependTo(document.body);
因此,当您使用prependTo()
,
appendTo()
方法时
$tip.remove().css({top: 0, left: 0, visibility: 'hidden', display: 'block'}).appendTo(document.body);
tipsy在文档末尾添加了工具提示,防止在文档顶部添加新的DOM元素。所以编辑源代码。
修改强>
如果您修复了特定问题,如果您要在设计的其他位置调用插件,则可以帮助修改源代码。我相信在您调用插件的代码的其他位置可能会出现问题,因为插件会在DOM树的顶部添加新元素。使插件在文档的末尾添加这些元素应该限制您遇到的错误类型。