如何创建一个水平菜单,每个项目的宽度和间距相等?

mpe*_*pen 3 html css navigation html-lists

这是我到目前为止所做的:小提琴

虽然有2个问题:

  1. 我硬编码每一个的宽度li33%,这是我不希望这样做,我可以轻松地添加更多的项目.
  2. 我想在每个项目之间留一些间距(背景颜色中的间隙),但是一旦我添加了一个边距,一个项目就会被撞到一条线上.我该如何解决这个问题?

#main-nav {
    list-style: none;
    margin: 0;
    padding: 0;
    width: 100%;
    overflow:  auto;
}
#main-nav li {
    float: left;
    width: 33%;
    height: 25px;
    text-align: center;
}
#main-nav li a {
    width: 100%;
    display: block;
    height: 100%;
    line-height: 25px;
    text-decoration: none;
    background-color: #e0e0f0;
    font-weight: bold;
    color: #021020;
}
#main-nav li a:hover {
    background-color: #498cd5;
    color: #ddeeee;
}
Run Code Online (Sandbox Code Playgroud)
<ul id="main-nav">
    <li><a href="#">one</a></li>
    <li><a href="#">two</a></li>
    <li><a href="#">three</a></li>
</ul>
Run Code Online (Sandbox Code Playgroud)

thi*_*dot 6

请参阅: http ://jsfiddle.net/f6qmm/

display: table用于均匀地分隔动态数量的lis.不幸的是,这在IE7 中不起作用,因此*float: left被使用(仅适用于IE7及更低版本),因此至少它们都在一条线上 - 尽管它仍然看起来很可怕.

padding-left: 5px应用于每个li,然后li:first-child { padding-left: 0 }仅为第一个删除它li.

#main-nav {
    list-style: none;
    margin: 0;
    padding: 0;
    width: 100%;
    display: table;
    table-layout: fixed;
    overflow: hidden
}
#main-nav li {
    display: table-cell;
    *float: left; /* improve IE7 */
    height: 25px;
    text-align: center;
    padding-left: 5px
}
#main-nav li:first-child {
    padding-left: 0
}
#main-nav li a {
    width: 100%;
    display: block;
    height: 100%;
    line-height: 25px;
    text-decoration: none;
    background-color: #e0e0f0;
    font-weight: bold;
    color: #021020;
}
#main-nav li a:hover {
    background-color: #498cd5;
    color: #ddeeee;
}
Run Code Online (Sandbox Code Playgroud)
<ul id="main-nav">
    <li><a href="#">one</a></li>
    <li><a href="#">two</a></li>
    <li><a href="#">three</a></li>
</ul>

<hr />

<ul id="main-nav">
    <li><a href="#">one</a></li>
    <li><a href="#">two</a></li>
    <li><a href="#">three</a></li>
    <li><a href="#">four</a></li>
    <li><a href="#">five</a></li>
</ul>
Run Code Online (Sandbox Code Playgroud)