目前我正在使用以下CSS来显示悬停框:
.box {
width: 500px;
padding: 3px;
background: #404040;
color: #fff;
font: normal 12px Arial, Sans-serif;
position: absolute;
}
javascript函数:
function showBox(i,j){
if(i==1){
document.getElementById("box"+j).style.display='block';
} else if(i==2) {
document.getElementById("box"+j).style.display='none';
}
}
html代码:
<div style="height:175px;overflow:auto;">
<table>
<tr>
<td>
<table>
<tr>
<td>
<p onmouseover="showBox(1,1);" onmouseout="showBox(2,1);" id="hover1">Hover Me 1</p>
<div id="box1" class="box">I'm hover box 1.</div>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<table>
<tr>
<td>
<p onmouseover="showBox(1,2);" onmouseout="showBox(2,2);" id="hover2">Hover Me 2</p>
<div id="box2" class="box">I'm hover box 2.</div>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<table>
<tr>
<td>
<p onmouseover="showBox(1,3);" onmouseout="showBox(2,3);" id="hover3">Hover Me 3</p>
<div id="box3" class="box">I'm hover box 3.</div>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<table>
<tr>
<td>
<p onmouseover="showBox(1,4);" onmouseout="showBox(2,4);" id="hover4">Hover Me 4 </p>
<div id="box4" class="box">I'm hover box 4.</div>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<table>
<tr>
<td>
<p onmouseover="showBox(1,5);" onmouseout="showBox(2,5);" id="hover5">Hover Me 5</p>
<div id="box5" class="box">I'm hover box 5.</div>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<table>
<tr>
<td>
<p onmouseover="showBox(1,6);" onmouseout="showBox(2,6);" id="hover6">Hover Me 6</p>
<div id="box6" class="box">I'm hover box 6.</div>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<table>
<tr>
<td>
<p onmouseover="showBox(1,7);" onmouseout="showBox(2,7);" id="hover7">Hover Me 7</p>
<div id="box7" class="box">I'm hover box 7.</div>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
如果你运行它,你会发现当你悬停在任何“Hover ME X”文本上时会出现一个悬停框。这可以正常工作,直到你没有在div中向下滚动。当你在div中向下滚动时,悬停框显示在错误的位置。我怎样才能克服这个问题?
答案 0 :(得分:2)
如果您使用
position: absolute;
你使用负边距和正边距,你可以将div放在任何你想要的位置(不需要使用除position:absolute之外的任何东西),边距将只相对于div放置在哪里码。 编码的另一个问题是,在你将鼠标悬停在激活它的文本之上之前,div会显示(至少在我的浏览器{chrome}中)。为了确保所有(或大多数)浏览器中的正确功能,一个非常快速的解决方法是将以下样式添加到CSS样式“框”中:
display: none;
这将默认隐藏DIV,反过来阻止它显示在页面加载上。然后,当您将鼠标悬停在文本上方时,JavaScript中的“display:block”将覆盖它,因此不存在任何问题。
我的“盒子”css风格的最终结果是:
padding: 3px; margin-left:-10px; margin-top:15px; color: #fff; font: normal 12px Arial, Sans-serif; position:absolute; display:none; padding: 10px 7px 10px 7px; border:#333333 1px solid; border-radius:3px; width:224px;
答案 1 :(得分:1)
问题是你绝对定位盒子:
position: absolute;
而是尝试定位相对或固定。
position:fixed;
答案 2 :(得分:0)
这里的问题是,在你滚动页面之前,div将被定位在正确的位置,当向下滚动时你必须记住你的页面已经从默认的屏幕大小扩展,所以在定位div时你必须考虑事实滚动顶部和向左滚动,然后才能正确定位div。尝试在css中定义表达式或手动编写自己的函数来定位div。 希望这会对你有所帮助。