CSS margin:0 auto对li>a无效

3

我希望有一个导航栏,其中的元素(li>a)居中显示。目前只实现了左浮动样式。

#wrapper {
  width: 900px;
  margin: 0 auto;
}
li {
  float: left;
}
ul>li>a {
  display: block;
  padding: 14px 16px;
  color: #fff;
  text-align: center;
  text-decoration: none;
  margin: 0 auto;
  font: 18px Inconsolata;
}
/* fdfdf */

ul {
  list-style: none;
  margin: 0;
  padding: 0;
  overflow: hidden;
  background-color: #333;
  border-radius: 20px;
}
ul>li:hover {
  background: #111;
}
li>a.active {
  background-color: #4CAF50;
  color: #fff;
}
<div id='wrapper'>
  <ul>
    <li><a class='active' href="#">Home</a>
    </li>
    <li><a href="#">Blog</a>
    </li>
  </ul>
</div>

你看到我放了ul>li>a {margin:0 auto;}

为什么它不起作用?

导航栏: enter image description here

2个回答

4
您需要将li元素设为内联元素,并通过text-align:center属性来让其父元素居中对齐,代码如下:

https://jsfiddle.net/h933o3jy/

#wrapper{
width:900px;
margin:0 auto;
text-align:center;
}

li {
  display:inline-block;
}

更新

您会注意到这些li项目之间有一个空格。为了摆脱它们,构建HTML的方式是将这些标签粘合在一起。例如:https://jsfiddle.net/h933o3jy/1/ </li><li>


但是最后一个问题,为什么它不会悬停在填充的整个背景区域上?我的意思是,在具有类.active的元素之前,悬停和元素之间有一点点空间。 - Katallone
这是因为它是一个内联块。因此,在“</li> <li>”标签之间的空格会被显示出来。只需将这些标签“粘”在一起</li><li>,它就会消失 https://jsfiddle.net/h933o3jy/1/ - Unamata Sanatarai

1

a的margin有效,但由于li有float:left,它的宽度变为自动。

如果你确定只有两个菜单项,可以从li中删除float:left,并将浮动添加到第一个li。

ul li:first-child{
      float: left;
}

演示

或者将li添加width:50%

li{
  float:left;
  width:50%
}

演示 2


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