3

我有一个使用以下 CSS 的 CSS 菜单。

将整个菜单置于页面中心的最佳方式是什么?

我尝试过使用另一个<div>外部<nav>并设置边距,但它一直在左对齐。

nav {
    margin: 0 auto; 
    text-align: center;
    border:1px solid black;
}

nav ul ul {
    display: none;
}

nav ul li:hover > ul {
    display: block;
}

nav ul {
    list-style: none;
}

nav ul li {
    float: left;
}

nav ul li:hover a {
    color: #000000;
}

nav ul li a {
    display: block; 
    padding: 10px 15px;
    color: #000000;
    text-decoration: none;
}       

nav ul ul {
    border-radius: 0px;
    padding: 0;
    position: absolute;
}

nav ul ul li {
    float: none; 
    border-top: 1px solid #000000;
    border-bottom: 1px solid #000000;
    position: relative;
}

nav ul ul li a {
    color: #000000;
}

nav ul ul li a:hover {
    color: #666666;
}

nav ul ul ul {
    position: absolute;
    top:0;
}

jsfiddle:http: //jsfiddle.net/njuVm/

4

3 回答 3

2

您可以使用以下 CSS 规则将导航栏居中:

nav {
    margin: 0 auto; 
    text-align: center;
    border:1px solid black;
}

nav ul ul {
    display: none;
}

nav ul li:hover > ul {
    display: block;
}

nav ul {
    list-style: none;
    margin: 0;                 /* << add this */
    padding: 0;                /* << add this */
    display: inline-block;     /* << add this */
    vertical-align: top;       /* << add this */
}

nav ul li {
    float: left;
    margin: 0;          /* << add this */
    padding: 0;         /* << add this */
}

nav ul li:hover a {
    color: #000000;
}

nav ul li a {
    display: block; 
    padding: 10px 15px;
    color: #000000;
    text-decoration: none;
    background-color: pink; /* optional... */
}       

nav ul ul {
    border-radius: 0px;
    padding: 0;
    position: absolute;
}

nav ul ul li {
    float: none; 
    border-top: 1px solid #000000;
    border-bottom: 1px solid #000000;
    position: relative;
}

nav ul ul li a {
    color: #000000;
}

nav ul ul li a:hover {
    color: #666666;
}

nav ul ul ul {
    position: absolute;
    top:0;
}

参见演示:http: //jsfiddle.net/audetwebdesign/DP6Ax/

关键是设置display: inline-blockfor nav ul,这将使您的text-align: center规则生效。

ul确保将和li元素上的边距和填充清零。你所做的其他一切都或多或少是正确的,所以你应该是好的。

于 2013-09-17T01:23:02.700 回答
1

li您可以将它们显示为inline-blocks ,而不是浮动。

然后,它们将相对于 居中,ul因为text-align: center

由于默认情况下 与默认ul一样宽,因此看起来相对于 居中。navlinav

nav {
  text-align: center;
  border: 1px solid black;
}
nav ul {
  list-style: none;
  padding: 0;
  margin: 0;
}
nav > ul > li {
  display: inline-block;
}
nav a {
  display: block; 
  padding: 10px 15px;
  color: #000000;
  text-decoration: none;
}
nav li:hover > ul {
  display: block;
}
nav > ul ul {
  display: none;
  position: absolute;
}
nav > ul ul > li {
  border-bottom: 1px solid #000000;
}
nav > ul ul a:hover {
  color: #666666;
}
<nav>
  <ul>
    <li><a href="/add_contact.php">Add Contact</a></li>
    <li><a href="/view_contact.php">View Contact</a></li>
    <li><a href="/tickets.php">Tickets</a>
      <ul>
        <li><a>TEST1</a></li>
        <li><a>TEST2</a></li>
      </ul>
    </li>
    <li><a href="/invoices.php">Invoices</a></li>
    <li><a href="/itemised_calls.php">Itemised Calls</a></li>
  </ul>
</nav>

于 2015-12-11T19:31:24.660 回答
-1

首先,当您浮动ul's 时,您必须通过添加cleardiv 来清除浮动:

HTML:

<div class="clear"></div>

CSS:

.clear{
    clear:both;
}

为了使菜单居中,您应该指定ul示例的宽度,并且随机我将宽度设置为560px

nav ul {
    list-style: none;
    width : 560px;
    margin: 0 auto;
}

看一看:

http://jsfiddle.net/njuVm/6/

于 2013-09-17T01:22:12.257 回答