【发布时间】:2014-05-22 21:20:05
【问题描述】:
我正在创建一个导航栏,使用 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 不再是块级元素)
【问题讨论】:
-
您是使用
position: absolute; left: 50%; transform: translateX(-50%);只是为了使菜单居中还是有其他原因使用它?还有其他方法可以使菜单居中。 -
@Mathias The position: absolute 调整 #nav 的宽度以完全适合项目周围,在右侧没有多余的间距,除了它只是让它在屏幕上居中跨度>
-
我建议了一种不同的解决方案,以在我的答案中将菜单居中。与使用
transform相比,它在旧版浏览器中有更好的支持