列出项目包裹太早,位置绝对

时间:2014-05-22 13:00:11

标签: html css

我正在创建一个导航栏,使用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>

2 个答案:

答案 0 :(得分:1)

您可以使用display: inline-block;上的#navbar和其父级text-align: center;来使菜单居中。然后你不必使用position: absolute; left: 50%

它在IE7中不起作用,但由于你现在正在使用transform,我猜这不会有问题。

Demo

#navbar_parent {
    text-align: center;
}

#navbar {
    display: inline-block;
}

答案 1 :(得分:0)

我可以从你的小提琴中看到两个原因:

  1. #nav位于左侧50%处。这意味着如果列表项更多,它们将不得不结束,因为它不能超越。
  2. #nav ul li a上的左右填充为35px。这意味着它们之间存在70px的差距。所以,即使你认为还有很多空间,也没有。
  3. <强> 解决方案

    left的{​​{1}}位置缩小到近似百分比。 和/或 减少#nav上的左右填充。

    演示:http://jsfiddle.net/abhitalks/7bWyM/1/

    CSS

    #nav ul li a