2013-08-19 65 views
0

我用CSS創建了一個DropDown菜單,但我無法解決一個問題:最後一個Menu元素的寬度小於DropDown的寬度。 下面是代碼: http://jsfiddle.net/eeFdP/CSS DropDown Menu Bug修復

我也許可以用寬度暫時解決問題,但它不是一個合乎邏輯的和永久的解決辦法,考慮到菜單可以與新元素擴展。 請幫忙?

HTML代碼:

<ul> 
    <li><a href="#">Home</a></li> 
    <li> 
    <a href="#">Tutorials</a> 
     <ul> 
      <li><a href="#">PHP</a></li> 
      <li><a href="#">CSS</a></li> 
      <li><a href="#">Javascript</a></li> 
     </ul> 
    </li> 
    <li> 
    <a href="#">Contact</a> 
     <ul> 
      <li><a href="#">By contact</a></li> 
      <li><a href="#">By email</a></li> 
     </ul> 
    </li> 
</ul> 
<div class="clear"></div> 
<p>I am a paragraph.</p> 

CSS代碼:

.clear { 
     clear:both; 
    } 

    ul { 
     list-style-type:none; 
     padding:0; 
     margin:0; 
    } 
    ul>li { 
     float:left; 
    } 

    ul>li>a { 
     display:block; 
     padding:5px 10px; 
     color:#000; 
     text-decoration:none; 
     background:#fff; 
     border-bottom:1px solid #ccc; 
    } 
    ul>li>a:hover { 
     background-color:#bbb; 
     color:white; 
    } 

    ul>li>ul { 
     position:absolute; 
     display:none; 
    } 
    ul>li>ul>li { 
     float:none; 
    } 
    ul>li:hover>ul { 
     display:block; 
    } 
+1

不理解的問題,所有的菜單項顯示爲具有相同的寬度給我。請指出您遇到的問題('聯繫人'或'Javascript'和'通過電子郵件'),並告知我們您測試過哪些瀏覽器。 – Godwin

+0

我相信OP意味着頂級菜單比下拉內容更窄。 @ user2653125 - 中心菜單實際上也一樣,但差別較小,所以很難看清。 – dc5

回答

0

而不是使用您的下拉列表中absolute定位,您可以使用relative位置0高度和overflow: visible。此外,您可以使用visibility: hidden/visible而不是display: none/block。這將使父母的成員知道他們的孩子。

http://jsfiddle.net/eeFdP/4/

ul > li > ul { 
    position: relative; 
    visibility: hidden; 
    height: 0; 
} 

ul > li:hover > ul { 
    visibility: visible; 
} 
1

簡單的寬度添加到您的父元素。像這樣:

CSS:

.clear { 
      clear:both; 
     } 

     ul { 
      list-style-type:none; 
      padding:0; 
      margin:0; 
     } 
     ul>li { 
      float:left; 
     } 

     ul>li>a { 
      width: 100px; /*-- Added width, specify to your liking --*/ 
      display:block; 
      padding:5px 10px; 
      color:#000; 
      text-decoration:none; 
      background:#fff; 
      border-bottom:1px solid #ccc; 
     } 
     ul>li>a:hover { 
      background-color:#bbb; 
      color:white; 
     } 

     ul>li>ul { 
      position:absolute; 
      display:none; 
     } 
     ul>li>ul>li { 
      float:none; 
     } 
     ul>li:hover>ul { 
      display:block; 
     } 

HTML:

<ul> 
     <li><a href="#">Home</a></li> 
     <li> 
     <a href="#">Tutorials</a> 
      <ul> 
       <li><a href="#">PHP</a></li> 
       <li><a href="#">CSS</a></li> 
       <li><a href="#">Javascript</a></li> 
      </ul> 
     </li> 
     <li> 
     <a href="#">Contact</a> 
      <ul> 
       <li><a href="#">By contact</a></li> 
       <li><a href="#">By email</a></li> 
      </ul> 
     </li> 
    </ul> 
<div class="clear"></div> 
<p>I am a paragraph.</p> 

這裏是工作的jsfiddle以及向您展示:http://jsfiddle.net/eeFdP/1/

這應該做的伎倆伴侶,希望幫助;)

+0

OP提到不想明確使用寬度...雖然我不確定在這種情況下有解決方案:) – dc5

+0

同意,我認爲他/她最好的選擇是在此情況下應用寬度 – Michael

+0

如果菜單容器寬度已知,您可以使用calc()值輕鬆分配寬度,而無需設置容器以外的特定寬度。例如:ul> li> a {width:calc(600px/4);}這會使每個導航項基於寬度爲600px的容器寬150px。小心瀏覽器支持:http://caniuse.com/calc。 – BJack