2013-01-15 103 views
0

我正在开发一个新的网站,并且遇到了css菜单的问题。这是比较容易通过例子来解释:这是网站的链接:http://www.webau.net/CSFF/index.asp用css菜单正确显示第三层子菜单

在“首页”父菜单项,我有以下配置:

Top level menu (parent) 
    Submenu 1 (child 1) 
     Submenu 2 (grandchild 1) 
    Submenu 3 (child 2) 
    Submenu 4 (child 3) 

相反,它看起来像在页面上这其中,孙子1看起来像它需要孩子2菜单的地方:

Top level menu (parent) 
    Submenu 1 (child 1) 
    Submenu 2 (grandchild 1) 
    Submenu 4 (child 3) 

我可以看到菜单2上市的轻微偏移..这让我觉得这是显示孙子的尝试不当。

所以我假设我有两个问题..

首先是,第三层菜单(孙子子菜单2)同时第二层菜单(子子菜单1,3,4)显示器,显示当你将鼠标悬停在父菜单项上时。

其次是,由于某种原因,孙子子2项正在取代(ontop的铺设)的子子菜单3.

我认为,当我纠正孙子子菜单的显示问题,有两种将其固定。

有人可以帮我弄清楚如何添加新的css代码来处理第三层或多层菜单..所以他们被隐藏,直到他们自己的父母被徘徊,然后显示在父母的右边子菜单栏?

再次感谢您的帮助。 SunnyOz

为了您的方便: HTML代码:

<div id="navcontainer"> 
    <div id="navsection"> 
     <ul> 
      <li id="navactive"><a class="current" href="#">Home</a> 
       <ul> 
        <li><a href="#">submenu 1</a> 
         <ul> 
          <li><a href="#">submenu 2</a></li> 
         </ul> 
        </li> 
        <li><a href="#">submenu 3</a></li> 
        <li><a href="#">submenu 4</a></li> 
       </ul> 
      </li> 
      <li><... rest of menu items not needed for example> 
      </li> 
     </ul> 
    </div> 
</div> 

CSS代码:

#navcontainer 
{ 
    width: 711px; 
    height: 25px; 
    text-align: center; 
    margin: 0px auto; /*Center container on page*/ 
    clear: both; 
    background-color: #129F9F; 
    border: 3px solid #FFFFFF; 
    -moz-border-radius: 5px; 
    -webkit-border-radius: 5px; 
    -o-border-radius: 5px; 
    -ms-border-radius: 5px; 
    border-radius: 5px; 

    /* IE10 Consumer Preview */ 
    background-image: -ms-linear-gradient(top, #16ACAC 0%, #0D6F6F 100%); 

    /* Mozilla Firefox */ 
    background-image: -moz-linear-gradient(top, #16ACAC 0%, #0D6F6F 100%); 

    /* Opera */ 
    background-image: -o-linear-gradient(top, #16ACAC 0%, #0D6F6F 100%); 

    /* Webkit (Safari/Chrome 10) */ 
    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #16ACAC), color-stop(1, #0D6F6F)); 

    /* Webkit (Chrome 11+) */ 
    background-image: -webkit-linear-gradient(top, #16ACAC 0%, #0D6F6F 100%); 

    /* W3C Markup, IE10 Release Preview */ 
    background-image: linear-gradient(to bottom, #16ACAC 0%, #0D6F6F 100%); 
} 
#navsection 
{ 
    height: 24px; 
    line-height: 24px; 
    font-size: 12px; 
    position: relative; 
} 
#navsection ul 
{ 
    padding: 0px 0px 0px 35px; /* padding on left to get nav menu to center.. since it has a float left to make it display properly*/ 
    list-style: none; 
} 
#navsection ul li 
{ 
    padding: 0; 
    margin: 0; 
    border-right: 2px solid #129F9F; 
    float: left; 
} 
#navsection ul li.navcontact /* to stop right border at end of nav line */ 
{ 
    padding: 0; 
    margin: 0; 
    border-right: none; 
    float: left; 
} 
#navsection ul li a 
{ 
    color: #FFF; 
    display: block; 
    text-decoration: none; 
    padding: 0 15px; 
} 
#navsection > ul > li > a:hover, #navsection > ul > li:hover > a 
{ 
    text-decoration: none; 
    color: #EAA339; 
    /* IE10 Consumer Preview */ 
    background-image: -ms-linear-gradient(top, #0D6F6F 0%, #16ACAC 100%); 

    /* Mozilla Firefox */ 
    background-image: -moz-linear-gradient(top, #0D6F6F 0%, #16ACAC 100%); 

    /* Opera */ 
    background-image: -o-linear-gradient(top, #0D6F6F 0%, #16ACAC 100%); 

    /* Webkit (Safari/Chrome 10) */ 
    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #0D6F6F), color-stop(1, #16ACAC)); 

    /* Webkit (Chrome 11+) */ 
    background-image: -webkit-linear-gradient(top, #0D6F6F 0%, #16ACAC 100%); 

    /* W3C Markup, IE10 Release Preview */ 
    background-image: linear-gradient(to bottom, #0D6F6F 0%, #16ACAC 100%); 
} 

#navsection > ul > li > a.current:hover, #navactive a.current:link, #navactive a:visited, #navactive > ul li a:hover, #navsection a:hover 
{ 
    text-decoration: none; 
    color: #EAA339; 
    /* IE10 Consumer Preview */ 
    background-image: -ms-linear-gradient(top, #0D6F6F 0%, #16ACAC 100%); 

    /* Mozilla Firefox */ 
    background-image: -moz-linear-gradient(top, #0D6F6F 0%, #16ACAC 100%); 

    /* Opera */ 
    background-image: -o-linear-gradient(top, #0D6F6F 0%, #16ACAC 100%); 

    /* Webkit (Safari/Chrome 10) */ 
    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #0D6F6F), color-stop(1, #16ACAC)); 

    /* Webkit (Chrome 11+) */ 
    background-image: -webkit-linear-gradient(top, #0D6F6F 0%, #16ACAC 100%); 

    /* W3C Markup, IE10 Release Preview */ 
    background-image: linear-gradient(to bottom, #0D6F6F 0%, #16ACAC 100%); 
} 

#navsection ul li ul 
{ 
    display: none; 
    width: auto; 
    position: absolute; 
    padding: 0px; 
    margin: 0px; 
} 
#navsection ul li:hover ul 
{ 
    display: block; 
    position: absolute; 
    margin: 0; 
    padding: 0; 
} 
#navsection ul li:hover li 
{ 
    float: none; 
    list-style: none; 
    margin: 0px; 
} 
#navsection ul li:hover li 
{ 
    font-size: 12px; 
    height: 24px; 
    background: #54C4C4; 
    border: 1px solid #FFFFFF; 
    -moz-border-radius: 5px; 
    -webkit-border-radius: 5px; 
    -o-border-radius: 5px; 
    -ms-border-radius: 5px; 
    border-radius: 5px; 
} 
#navsection ul li:hover li a 
{ 
    font-size: 11px; 
    color: #fff; 
    padding: 0px; 
    display: block; 
    width: 150px; 
} 
#navsection ul li li a:hover 
{ 
    font-size: 11px; 
    height: 24px; 
    color:#EAA339; 
    -moz-border-radius: 5px; 
    -webkit-border-radius: 5px; 
    -o-border-radius: 5px; 
    -ms-border-radius: 5px; 
    border-radius: 5px; 
} 

回答

0

这里有3个问题。

  1. 您显示存在以下徘徊<li/>所有<ul/>元素。 更改#navsection ul li:hover ul#navsection ul li:hover > ul选择直接子只

  2. 您正在设置每个drop level的位置是相同的。 尝试添加诸如#navsection ul ul ul { top: 1em; left: 140px; }之类的东西,这将阻止孙子遮住孩子。

  3. 你是title属性会对您的导航产生负面影响。 我会完全删除它们,因为它们不会向链接添加任何实际有益信息,从而掩盖导致难以使用导航的菜单项。

我希望帮助:)

+0

谢谢你,谢谢你!我使用了你的所有建议,现在它完美运行!我害怕推动我的运气,但我想知道你是否可以帮助我与另外两件物品。我再次对[链接](http://www.webau.net/CSFF/index.asp)进行了更改,但现在将下拉菜单移至“What about CSFF”选项卡。我添加了3层子菜单。第一个问题:您可以看到,如果将鼠标悬停在子菜单2上,则会显示第三级子菜单,但它位于上一子菜单列顶部1em处,而不是它自己父母位置的1em处。这可以修复吗? – SunnyOz

+0

第二个问题:有没有办法让子菜单与它自己的一组子菜单中的最大内容大小相同?我拥有200px的所有子菜单,并且它适用于第一个子功能。但在我的示例中,其余部分太长。 (另请参阅“进行捐赠”中的子菜单。)我显然希望子菜单的大小与其子菜单组一致,但它们可能与其他子菜单组不同。再次感谢你的帮助!! – SunnyOz

+0

不用担心:)。第一个新问题:从'#navsection ul li:hover> ul'移除'margin:0'并更改'#navsection ul ul ul {top:1em; }'to'#navsection ul ul ul {margin-top:-1em; }'。第二个问题:你可以但会涉及更多的标记。向导航中的每个第一级项目添加一个类,并使用此类设置项目子菜单宽度和偏移量(例如'left:205px')。你需要知道菜单宽度来设置偏移量,这就是为什么你需要这些类。希望有帮助:)如果你有进一步的问题,请开始一个新的线程;我们希望其他用户可以发现问题 – lnrbob