我正在创建一个导航栏,使用position:absolute;
在屏幕上居中我发现列表项目过早地包装到下一行。例如,如果导航栏的显示为500px,我预计它会在屏幕宽度达到499px之前不会换行,但在此之前似乎要换行。
这是我的代码
HTML
<div id="nav">
<ul>
<li><a href="#">Home</a></li>
<li><a href="#">About us</a></li>
<li><a href="#">Find us</a></li>
<li><a href="#">News</a></li>
<li><a href="#">Contact</a></li>
</ul>
</div>
CSS
* {
margin: 0;
padding: 0;
}
#nav {
position: absolute;
left: 50%;
transform: translateX(-50%);
overflow: hidden;
background: #4d4d4d;
}
#nav ul {
list-style: none;
}
#nav ul li {
float: left;
}
#nav ul li a {
display: block;
padding: 15px 35px;
color: #ffffff;
}
#nav ul li:first-of-type a {
border-left: none;
}
#nav ul li:last-of-type a {
border-right: none;
}
我创建了一个JSfiddle来演示这个问题,你可以在这里找到http://jsfiddle.net/7bWyM/
正如您所看到的,当仍有大量空间用完时,列表项将换行到下一行。
我的问题是;
1)为什么不占用这个空间?我希望它一直保持在一条线上,直到屏幕变得太小而无法适应它。
2)我如何解决这个问题?我无法设置宽度,因为我不知道将有多少导航项目,我希望宽度自动调整到内部(因为我已经使用位置绝对,因为div不再是块级元素)< / p>
答案 0 :(得分:1)
您可以使用display: inline-block;
上的#navbar
和其父级text-align: center;
来使菜单居中。然后你不必使用position: absolute; left: 50%
它在IE7中不起作用,但由于你现在正在使用transform
,我猜这不会有问题。
#navbar_parent {
text-align: center;
}
#navbar {
display: inline-block;
}
答案 1 :(得分:0)
我可以从你的小提琴中看到两个原因:
#nav
位于左侧50%处。这意味着如果列表项更多,它们将不得不结束,因为它不能超越。#nav ul li a
上的左右填充为35px。这意味着它们之间存在70px的差距。所以,即使你认为还有很多空间,也没有。<强> 解决方案 强>:
将left
的{{1}}位置缩小到近似百分比。
和/或
减少#nav
上的左右填充。
演示:http://jsfiddle.net/abhitalks/7bWyM/1/
CSS :
#nav ul li a