2015-10-19 173 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