水平菜单/列表对齐问题

时间:2012-12-17 23:44:50

标签: css list menu alignment styling

这是我在stackoverflow上的第一篇文章,但我不断地用你们的知识,谢谢!

我遇到菜单对齐问题。我有一个wordpress菜单,我在li元素中添加了div,这样我就可以拥有每个菜单的第一个/中间/最后一个组件。这样我可以将当​​前菜单状态提升,第一个和最后一个项目是“endcaps”。很难解释,你可以在这里看到它:http://clarksvillevet.com/new/

注意当前菜单项的中间部分是如何“下沉”的?我无法弄清楚我在这里缺少什么。我以为是线高,但这只会移动一点。我猜css有些重叠(如果你知道我的意思,有点叫它两次),但是再一次,不知道。这是生成的HTML:

<div id="main-menu">
<ul id="menu-main-menu" class="menu">
<li id="menu-item-8" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-8">
<li id="menu-item-23" class="menu-item menu-item-type-post_type menu-item-object-page current-menu-item page_item page-item-9 current_page_item menu-item-23">
<div class="first"></div>
<div class="middle">
<a href="http://clarksvillevet.com/new/about-southside-va-veterinary-hospital/" title="About Southside Virginia’s Best Veterinary Hospital">About</a>
</div>
<div class="last"></div>
</li>
<li id="menu-item-20" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-20">
<li id="menu-item-50" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-50">
<li id="menu-item-56" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-56">
<li id="menu-item-62" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-62">
</ul>
</div>

和CSS

#main-menu{
width: 598px;
height: 51px;
margin: -6px 0px 0px;
z-index:401;
float: left;
background:url('images/BG-Menu.png') no-repeat top left transparent;
}

.menu {
list-style-type:none;
list-style-position:outside;
list-style-image:none;
position:relative;
z-index:300;
width: 598px;
height: 51px;
float: left;
line-height: 57px;
}

.menu ul{
position:absolute;
line-height: 57px;
overflow:hidden;
margin:0px;
padding:0px;
top: 51px;
left:0px;
display: none;
list-style-position:outside;
}

.menu a {
display:block;
display:inline-block;
padding:0px;
text-decoration:none;
letter-spacing: 1px;
font-size: 13px;
color: #dddddd;
margin: 0px;
}

.menu .first, .menu .middle, .menu .last {
position: relative;
padding:0px;
display: inline-block
}

.menu .first, .menu .last{
width: 11px;
height: 51px;
margin: 0px;
padding: 0px;
}

.menu .middle {
height:51px;
margin: 0px;
padding: 0px;
}

.menu a:hover {
color:#ffffff;
background-color:transparent;
}

.menu li {
float:left;
position:relative;
}


.menu ul a:hover {
color:#ffffff;
}

.menu li ul a {
width: 250px;
height: 32px;
float:left;
line-height: 30px;
background: url('images/BG-Drop-Menu.png') no-repeat top left transparent;
padding: 0px 0px 0px 20px;
color: #ffffff;
}

.menu li ul a:hover{
background: url('images/BG-Drop-Menu-Hover.png') no-repeat top left transparent;
}

.menu li ul ul {
left:0em;
margin:0px 0 0 10px;
}

.menu li:hover ul ul, .menu li:hover ul ul ul, .menu li:hover ul ul ul ul {
display:none;
}

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

.current-menu-item .first{
background:url('images/BG-Menu-Current-A.png') no-repeat top left transparent;
}

.current-menu-item .middle{
background:url('images/BG-Menu-Current-B.png') repeat-x top left transparent;
}

.current-menu-item .last{
background:url('images/BG-Menu-Current-C.png') no-repeat top left transparent;
}

.current-menu-item{
line-height: 51px;
}

还有一个下拉菜单,所以当你看到.menu ul display:none时,就是它的...它可以随意纠正你可能看到的任何疯狂!谢谢!

2 个答案:

答案 0 :(得分:0)

所有子divs都是内联块。发生这种情况时,如果包含文本,则将应用行高。要解决此问题,您需要将divs浮动,如下所示。

.menu ul > div { float: left }

答案 1 :(得分:0)

如果你同时浮动.first和.middle(float:left;),这将解决当前的问题。

但我觉得你的菜单更多不仅仅是因为这个问题。这里有几件事要看:

  • 你有.first .middle和.last。为什么不只有一个.first和.last,你的.last有一个.middle和.last结合的背景图片?它需要更长的时间来容纳您的其他菜单项,但这意味着只加载了2个图像。

  • 尽量避免空div,特别是在菜单中。这是可访问性和SEO的重要部分。你应该花时间精炼本节的标记(可能)比你网站的任何其他部分更多。

  • 不使用行高(在尝试跨浏览器时会感到困惑),请尝试填充和边距。