2015-10-19 93 views
1

第一次海報!長時間堆棧溢出嘗試了這一點:CSS下拉菜單截止

我正在設計一個CSS菜單,並且我無法將我的默認樣式應用到<ul>列表中的子子菜單。您可以在下面的JS提琴中看到我現在所擁有的東西。如果您將鼠標懸停在第2項上,則顯示的下拉列表就是我之後的內容,但是如果您將鼠標懸停在第4項上,則可以看到下一個ul的內容。

是否有人能夠發現我的CSS中的缺陷?非常感謝提前!

http://jsfiddle.net/b7den1s1/

.new-menu { 
 
    background-image: url("/images/logo.gif"); 
 
    background-repeat: no-repeat; 
 
    background-position: left; 
 
    background-color: #fff; 
 
    display: block; 
 
    float: right; 
 
    margin: 0 auto; 
 
    width: 100%; 
 
    height: 42px; 
 
    margin-bottom: 5px; 
 
} 
 
.new-menu ul, 
 
div.menu ul { 
 
    list-style: none; 
 
    margin: 0; 
 
    padding: 0; 
 
    font-size: 16px; 
 
} 
 
.new-menu li, 
 
div.menu li { 
 
    float: right; 
 
    position: relative; 
 
} 
 
.new-menu ul li { 
 
    background-image: url("/images/small-bar.jpg"); 
 
    background-repeat: no-repeat; 
 
    background-position: bottom; 
 
    margin-right: 15px; 
 
} 
 
.new-menu li li, 
 
.new-menu li li li { 
 
    width: 100%; 
 
    float: right; 
 
    background-image: none; 
 
} 
 
.new-menu li a { 
 
    white-space: nowrap; 
 
} 
 
.new-menu ul ul, 
 
.new-menu ul ul ul { 
 
    display: none; 
 
    position: absolute; 
 
    top: 38px; 
 
    left: auto; 
 
    right: 0; 
 
    float: right; 
 
    width: auto; 
 
    z-index: 99999; 
 
    font-size: 12px; 
 
} 
 
.new-menu ul ul ul { 
 
    left: 100%; 
 
    top: 0; 
 
    z-index: 99999999; 
 
} 
 
.new-menu a { 
 
    color: #aaa; 
 
    display: block; 
 
    line-height: 41px; 
 
    padding: 0 10px; 
 
    text-decoration: none; 
 
    font-weight: normal; 
 
} 
 
.new-menu ul li:hover > ul, 
 
.new-menu ul ul li:hover > ul { 
 
    display: block; 
 
} 
 
.new-menu li:hover > a, 
 
.new-menu ul li:hover > a, 
 
.new-menu ul ul li:hover > a { 
 
    background: #333; 
 
    color: #fff; 
 
} 
 
.new-menu ul ul a, 
 
.new-menu ul ul ul a { 
 
    background-color: rgba(51, 51, 51, 0.7); 
 
    line-height: 1em; 
 
    padding: 10px; 
 
    height: auto; 
 
    color: #fff; 
 
}
<div class="new-menu"> 
 
    <ul> 
 
    <li><a href="#">Item 1</a> 
 
     <li><a href="#">Item 2</a> 
 
     <ul> 
 
      <li><a href="#">Item 3</a> 
 
      <li><a href="#">Item 4</a> 
 
       <ul> 
 
       <li><a href="#">Item 5</a> 
 
        <li><a href="#">Item 6</a> 
 
       </ul> 
 
     </ul> 
 
    </ul> 
 
</div>

+0

另外,我歡迎任何關於如何正確設計我在這裏提出的問題的指針。我知道我發佈的CSS代碼是不完整的,但我必須手動縮進整個事物才能進入代碼框,並且它變得太耗時。 – thecommish3

+0

如果您將代碼放置在適當的空間位置,您可以:將代碼粘貼到編輯器中,選中它,使其突出顯示,然後單擊代碼示例按鈕'{}'。它將添加間距以使其格式化爲代碼。或者,對於HTML/CSS/JavaScript代碼,您可以單擊片段按鈕'<>'並將代碼粘貼到那裏。這將使它成爲一個可運行的片段。 – BSMP

+0

無論哪種方式,在問題本身中有足夠的代碼來複制錯誤是一項要求,儘管現在看起來某人可能會將其編輯爲問題。 – BSMP

回答

0

設置width至100%的該類.new-menu ul ul ul{...}

.new-menu { 
 
    background-image: url("/images/logo.gif"); 
 
    background-repeat: no-repeat; 
 
    background-position: left; 
 
    background-color: #fff; 
 
    display: block; 
 
    float: right; 
 
    margin: 0 auto; 
 
    width: 100%; 
 
    height: 42px; 
 
    margin-bottom: 5px; 
 
} 
 
.new-menu ul, 
 
    div.menu ul { 
 
    list-style: none; 
 
    margin: 0; 
 
    padding: 0; 
 
    font-size: 16px; 
 
} 
 
    
 
.new-menu li, 
 
    div.menu li { 
 
    float: right; 
 
    position: relative; 
 
} 
 

 
.new-menu ul li { 
 
    background-image: url("/images/small-bar.jpg"); 
 
    background-repeat: no-repeat; 
 
    background-position: bottom; 
 
    //margin-right: 15px; 
 
} 
 

 
.new-menu li li, 
 
.new-menu li li li { 
 
    width: 100%; 
 
    float: right; 
 
    background-image: none; 
 
} 
 

 
.new-menu li a {white-space:nowrap;} 
 

 
.new-menu ul ul, 
 
.new-menu ul ul ul { 
 
    display: none; 
 
    position: absolute; 
 
    top: 38px; 
 
    left:auto; 
 
    right:0; 
 
    float: right; 
 
    width: 100%; 
 
    z-index: 99999; 
 
    font-size: 12px; 
 
} 
 

 
.new-menu ul ul ul { 
 
    left: 100%; 
 
    top: 0; 
 
    z-index: 99999999; 
 
} 
 

 
.new-menu a { 
 
    color: #aaa; 
 
    display: block; 
 
    line-height: 41px; 
 
    padding: 0 10px; 
 
    text-decoration: none; 
 
    font-weight: normal; 
 
} 
 

 
.new-menu ul li:hover > ul, 
 
.new-menu ul ul li:hover > ul { 
 
    display: block; 
 
} 
 

 
.new-menu li:hover > a, 
 
.new-menu ul li:hover > a, 
 
.new-menu ul ul li:hover > a { 
 
    background: #333; 
 
    color: #fff; 
 
} 
 

 
.new-menu ul ul a, 
 
.new-menu ul ul ul a { 
 
    background-color: rgba(51, 51, 51, 0.7); 
 
    line-height: 1em; 
 
    padding: 10px; 
 
    height: auto; 
 
    color: #fff; 
 
}
<div class="new-menu"> 
 
    <ul> 
 
     <li><a href="#">Item 1</a> 
 
     <li><a href="#">Item 2</a> 
 
     <ul> 
 
     <li><a href="#">Item 3</a> 
 
      <li><a href="#">Item 4</a> 
 
      <ul> 
 
       <li><a href="#">Item 5</a> 
 
       <li><a href="#">Item 6</a> 
 
      </ul> 
 
     </ul> 
 
    </ul> 
 
</div> 
 
    

+0

謝謝!正式愛上了stackoverflow。固定。 – thecommish3

+0

歡迎您:) –

0

你可以只添加以下內容:

.new-menu li a {white-space:nowrap; display: inline-block;} 
0

歡迎StackOverflow上,thecommish3

TL; DR

無需添加更多的代碼爲其他用戶所提出的建議 - 剛剛從下面取出right: 0;

.new-menu ul ul, 
.new-menu ul ul ul { 
    display: none; 
    position: absolute; 
    top: 38px; 
    left:auto; 
    right:0; /* Remove this rule! */ 
    float: right; 
    width: auto; 
    z-index: 99999; 
    font-size: 12px; 
} 

更長的答案,如果你好奇,以我如何解決這個問題

我把一個更好的方式格式化代碼在可能是一把小提琴10,考慮到:

  • 使用的類名,例如.menu {},而不是應用規則對元素例如ul {}
  • BEM-like naming conventions允許用於:
    • 更好的可讀性代碼結構的 - 你可以看到這是怎麼回事!
    • 鼓勵您編寫類名來定位特定元素,例如.menu-item--sub,而不是訴諸特殊性,例如ul ul li。這意味着你有一個規則(或規則組)一個類,而不是混亂和易於突破specificity chain
  • 可重用的組件,例如.menu.item-link - CSS和更少的頭痛誘導:)少線
  • 更好的HTML格式如壓痕,結束標籤,如<li><a>Link</a></li>
  • 簡寫如background: #fff url("/images/logo.gif") no-repeat left;

改善格式,結構&命名你的代碼後我能夠輕鬆診斷問題!

我的主要目標是在未來節省您的頭痛 - 有時,我詛咒過去 - 我寫代碼,我花了一些時間後,我不明白,所以我試着寫儘可能「維護」的代碼,即將來 - 我可以從現在開始看一年,並且仍然理解正在發生的事情(也可能是其他人沒有事先了解並瞭解正在發生的事情)。

隨意忽略,否則希望它有幫助 - 如果您想了解更多關於我上面提到的任何事情的信息,或者對我的小提琴中的代碼有任何疑問,請與我們聯繫。

+0

「當前我」絕對是「過去的你」 - 我傾向於繼續加強我開始的代碼,然後調整它,直到最後它幾乎無法辨認。你是對的 - 如果我必須回到它,很難弄清楚我原來的工作。 我完全竊取了大部分免費提供的建議和代碼。感謝您抽出寶貴的時間。 – thecommish3

+0

遲來的實現 - 有了這個菜單,不幸的是,我在Wordpress中設置了一個菜單,因此除非我想手動將CSS類名添加到菜單項中的每個菜單項,否則所有「ul ul ul」 WordPress的菜單UI。 – thecommish3