【发布时间】:2010-04-22 09:41:24
【问题描述】:
我在 html/css 中创建了一个菜单,但我希望子项在父项悬停时显示。问题是当我在 IE 中将鼠标悬停在它上面时,它只会在我将鼠标悬停在菜单项中的文本上时显示它的子项,如果我将鼠标悬停在元素而不是文本上,子项会再次消失。因此,如果我悬停并想将鼠标移动到我的子菜单,除非我足够快,否则子菜单就会消失。这很烦人,有谁知道我该如何解决这个问题?
我的菜单代码是这样的:
<ul id="leftnav">
<li><a>Item1</a></li>
<ul>
<li><a href='#'>SubItem1</a></li>
<li><a href='#'>SubItem2</a></li>
<li><a href='#'>SubItem3</a></li>
</ul>
<li><a>Item2</a></li>
<ul>
<li><a href='#'>SubItem1</a></li>
<li><a href='#'>SubItem2</a></li>
<li><a href='#'>SubItem3</a></li>
</ul>
</ul>
菜单应该是一个左侧菜单,它只在悬停时显示它的子项,所以我使用 css 来实现这一点,代码如下:
#leftnav, #leftnav ul
{
padding: 0;
margin: 0;
}
#leftnav ul li
{
margin-left: 102px;
position: relative;
top: -19px; /*sets the childitems on the same height as the parent item*/
}
#leftnav li
{
float: left;
width: 100px;
}
#leftnav ul
{
position: absolute;
width: 100px;
left: -1000px; /*makes it disappear*/
}
#leftnav li:hover ul, #leftnav li.ie_does_hover ul
{
left: auto;
}
#leftnav a
{
display: block;
height: 15px;
margin-top: 2px;
margin-bottom: 2px;
}
由于这仅适用于 firefox,因此我还必须插入一个 javascript 以使其在 IE 中使用代码:
<script language="JavaScript">
sfHover = function()
{
var sfElsE = document.getElementById("leftnav").getElementsByTagName("LI");
for (var i=0; i<sfElsE.length; i++)
{
sfElsE[i].onmouseover=function()
{
this.className+=" ie_does_hover";
}
sfElsE[i].onmouseout=function()
{
this.className=this.className.replace(new RegExp(" ie_does_hover\\b"), "");
}
}
}
if (window.attachEvent) window.attachEvent("onload", sfHover);
</script>
非常感谢您的回复
【问题讨论】:
-
您的 HTML 无效,并且已经有数百个脚本可以执行此操作(尽管这是一个坏主意:message.uk.com/dropdown-menus-no-thanks)。你为什么要重新发明这个轮子?
-
@David - 感谢您将此作为评论而不是答案发布。为此 +1 和一个很好的链接。
-
是的,好吧,你有关于重新发明它的观点,但我没有找到任何像样的。问题是,我有义务使用它,因为我有一个主顶部导航和一个 huuuuge 左侧导航(不,我不能缩小它,我想要这个)。所以我几乎肯定会这样做,我也可以在元素之间输入它们...
标签: javascript html css internet-explorer menu