0

2 レベルの CSS ドロップダウン メニューを設計しました。1つだけを除いて、すべてが完璧に機能します。一番上のメニュー項目にカーソルを合わせると、第 1 レベルのドロップダウン メニューが表示され、第 1 レベルのメニューで「 Press」という項目にカーソルを合わせると、第 2 レベルのメニュー項目が表示されるようにします。しかし問題は、トップ メニューにカーソルを合わせると、すべてのサブメニューが一緒に表示されることです。つまり、display: noneは機能しません。なぜそれが起こり、解決策は何ですか?

jsfiddle.net

HTML コード

<ul id="nav">
 <li><a href="/ueber_uns.htm">About Us</a>
  <ul>
    <li><a href="#">Who We Are</a></li>
    <li><a href="#">Our Goals</a></li>
    <li><a href="#">Our Team</a></li>
    <li><a href="#">Press</a>
     <ul>
      <li><a href="#">2006</a></li>
      <li><a href="#">2007</a></li>
      <li><a href="#">2008</a></li>
     </ul>
    </li>
   <li><a href="#">Impressum</a></li>
  </ul>
 </li>
</ul>

CSSコード

ul#nav 
{
margin: 0;
padding: 0;
list-style: none;
text-align: center;
/*display: table-cell;
vertical-align: middle;*/
}
ul#nav li
{
float: left;
position: relative;
font-size: 16px;
background-color: orange;
}
ul#nav li li
{
font-size: 14px;
}
ul#nav ul 
{
margin: 0;
padding: 0;
list-style: none;
text-align: left;
display: none;
}
ul#nav li:hover ul 
{
display: block;
position: absolute;
}
ul#nav a:link, ul#nav a:visited
{
display: block;
width: 110px;
padding: 10px 5px;
text-decoration: none;
color: #000;
}
ul#nav ul a:link, ul#nav ul a:visited 
{
width: 135px;
}
ul#nav a:hover, ul#nav a:active
{
color: #fff;
}
ul#nav ul ul
{
position: absolute;
top: 0;
left: 100%;
display: none;
}
ul#nav ul li:hover ul
{
display: block;
}
4

3 に答える 3

2

これを変える

ul#nav li:hover ul 
{
display: block;
position: absolute;
} 

これに

ul#nav li:hover > ul 
{
display: block;
position: absolute;
}

基本的ul#nav li:hover > ulには、2 番目のドロップダウン メニューのみをターゲットにするということです。そのため、私たちにカーソルを合わせると、2 番目のレベルのメニューのみが表示され、3 番目のメニューは非表示になります。

于 2012-07-07T12:16:14.883 に答える
1

これ

li:hover ul

すべての子孫に適用されますul。これを次のように変更します。

li:hover>ul

直系の子孫に適用します。

于 2012-07-07T12:21:13.227 に答える
0

直接の子セレクターを使用する>

http://jsfiddle.net/2J4e3/2/

于 2012-07-07T12:25:13.347 に答える