CSS菜单消失

时间:2010-04-22 09:41:24

标签: javascript html css internet-explorer menu

我在html / css中创建了一个菜单,但我想在子项hover上显示子项。问题是当我在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> 

许多人非常感谢你的回复

2 个答案:

答案 0 :(得分:2)

在CSS中你有:

#leftnav li:hover ul

这意味着该规则适用于作为li元素的子元素的ul元素,当父li被悬停时。

但是在你的HTML中,你有:

<li><a>Item2</a></li>
    <ul>
        <li><a href='#'>SubItem1</a></li>
   </ul>

因此子项ul不是项ul的子项,因此该规则永远不会实现。您需要将子项嵌套到项目中。像这样:

<ul id="leftnav">
   <li><a>Item1</a>
       <ul>
           <li><a href='#'>SubItem1</a></li>
           <li><a href='#'>SubItem2</a></li>
           <li><a href='#'>SubItem3</a></li>
      </ul>
   </li>
   <li><a>Item2</a>
       <ul>
            <li><a href='#'>SubItem1</a></li>
            <li><a href='#'>SubItem2</a></li>
            <li><a href='#'>SubItem3</a></li>
      </ul>
   </li>
</ul>

注意在子列表之后我不会关闭列表项。

答案 1 :(得分:0)

Reinventing the wheelhttp://www.htmldog.com/articles/suckerfish/教你了解它。他们甚至有great example