如何使用CSS将float:left的ul/li导航菜单居中对齐?

26

我有以下CSS代码,用于显示水平导航栏:

.navigation ul {
  list-style: none;
  padding: 0;
  margin: 0;
}

.navigation li {
  float: left;
  margin: 0 1.15em;
  /*    margin: 0 auto;*/
}

.navigation {
  /*    width: auto;*/
  /*    margin: 0 auto;*/
  text-align: center;
}

我的问题是:如何将导航栏居中对齐到标题上方?


你敢呼叫连字符站点吗?你已被流放出此地。;) (开个玩笑!NetHack玩家们可能会认出第一句话。) - Lucas Jones
10个回答

73

1
更好的是,这个解决方案还可以在你缩小尺寸时自动换行,这正是我在这里寻找的。 - Joe
他为什么没有得到正确的答案标记?该死的人们...谢谢Marini - Szymon
谢谢!这绝对是一个干净的解决方案,而且链接也很好地解释了正在发生的事情。 - Jens Wegar

22

给你的 .navigation ul 设置一个宽度,然后使用 margin:0 auto;。

.navigation ul 
{
  list-style: none;
  padding: 0;
  width: 400px;
  margin: 0 auto;
}

7
定义宽度并不是真正的解决方法。如果再加入一个列表项,就需要改变宽度。Ben Marini的链接是我找到的适当解决方案。 - Code Lover

13

要在某个元素上使用margin:0 auto,该元素必须具有明确定义的宽度。可能最好的解决方法是:

ul li {
  display: inline;
  list-style-type: none;
}
ul {
  text-align:center;
}

1
如果您想使用此方法但仍然能够使用“border”、“background”和其他块属性,也可以使用“display: inline-block”。 - David L

5

有些设置,如浮动和外边距可能会影响此代码的正常工作。它在IE7中也能正常工作。我从CSS Wizardry的一篇文章中获取了这段代码。

.navigation ul 
{
    list-style: none;
    padding: 0;
    margin: 0;
    text-align: center;/*make this change*/
 }
.navigation li
 {
    float: none;/*make this change*/
    display:inline;/*make this change*/
    margin: 0 1.15em;
 /* margin: 0 auto; */
 }
 .navigation li a {
    display:inline-block;/*make this change*/
 }
 .navigation 
 {
  /*width: auto;*/
  /*margin: 0 auto;*/
    text-align: center;
 }

2
您可以将<li>设置为display:inline,然后在<ul>上设置text-align:center。这样做,您可以从列表项中删除float:left,而且如果您使用margin:0 auto,则不需要为导航栏设置固定宽度。
<html>
  <head>
    <style>
      ul { 
        list-style: none;
        text-align: center;
      }

      li {
        display: inline;
        margin: 0 1.15em;
      }
    </style>
  </head>

  <body>
    <ul>
      <li>Option 1</li>
      <li>Option 2</li>
      <li>Option 3</li>
    </ul>
  </body>
</html>

2
这个对我非常有效!(如果我没猜错的话:IE7+)
示例:http://jsfiddle.net/fourroses666/zj8sav9q/3/
.nav{list-style:none; text-align:center;}
.nav ul{list-style:none;}
.nav li{display:inline;}
.nav a{text-decoration:none; font-size:20px; line-height:20px; display:inline-block;}

<nav class="nav" role="navigation" aria-label="main navigation">
  <ul>
    <li><a href="#">Home</a></li>
    <li><a href="#">Menu</a></li>
    <li><a href="#">Onze producten</a></li>
    <li><a href="#">Impressie</a></li>
    <li><a href="#">Media</a></li>
    <li><a href="#">Contact</a></li>
  </ul>
</nav>

1
ul {
 display: inline-block;
 text-align: center;
}

0
.navigation ul 
{
  list-style-type: none;
  padding: 0px;
  width: 200px;
  margin: 0 auto;
}

0
如果您想在代码中继续使用您的浮动 LI,您可以使用以下方法:
JSFiddle: https://jsfiddle.net/Lvujttw3/
<style>
.wrapper {
    width: 100%;
    background-color:#80B5EB;
    text-align: center;
    }
.intWrapper {
    display: inline-block;
    }
.mainMenu {
    padding: 0;
    min-height: 40px;
    margin:auto;
    }
ul {
    list-style-type: none;
    }
ul li {
    float: left;
    font-size: 15px;
    line-height: 40px;
    }
ul li A {
    display: block;
    color: white;
    font-weight: bold;
    font-family: Arial;
    text-decoration: none;
    min-height: 40px;
    padding: 0 36px;
    }
</style>

<div class="wrapper">
    <div class="intWrapper"> 
        <ul class="mainMenu">   
            <li><a href="one.htm" style='background-color:red'>ITEM ONE</a>
            </li><li><a href="two.htm">ITEM TWO</a>
            </li><li><a href="three.htm" style='background-color:red'>ITEM THREE</a>        
            </li>   
        </ul></div>
    </div>
</div>

-1
style="position: absolute; z-index: 1;"

2
请在您的答案中添加更多信息,以增加清晰度。 - CodeChanger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接