html - 水平居中具有不同背景图像宽度的列表项

标签 html css

我无法在容器 div 中水平居中列表项。我尝试在 li 和 li a 上使用 display:inline 但这没有帮助。我还在 ul 和 li 上尝试了文本对齐中心,但没有给我结果。我的解决方案几乎就在那里,但是如果我从 HTML 中删除两个箭头 LI,它就会中断并看起来像此处发布的第二张图片,而不是自动将社交媒体图标居中。为了故障排除,我现在对所有内容都有边界。

理想情况下,如果我删除箭头或 facebook 列表项,其他项应继续在容器内居中。在尝试 float 和 display:inline-block 和 inline 方法但收效甚微后,我对如何实现我想要的结果感到有点困惑。通过使用 display:inline,我能够用纯文本实现我想要的效果,但是这些需要是背景图像,并且箭头的宽度与社交媒体图标的宽度不同。 (我想也可以变成 Sprite 而不是单个 Sprite )

HTML:

 <div id="socialbox">
    <ul id="social">
      <li id="leftarrow"><a></a></li>
      <li id="facebook"><a href=""></a></li>
      <li id="twitter"><a href=""></a></li>
      <li id="youtube"><a href=""></a></li>
      <li id="rightarrow"><a></a></li>
    </ul>
</div>

CSS:

#socialbox {width:400px; border:1px solid black; margin:0 auto; margin-top:0px; }
#social{overflow:auto; border:1px solid blue;}
#social ul {list-style:none; margin:0 auto;}
#social li{float:left; margin-right:15px;border:1px solid red;}
#social li, #social a{height:53px;display:block;}

#leftarrow{width:30px; border:0px solid black; background:url('../img/leftarrow.png')no-repeat 0 0px;}
#leftarrow a:hover{background: url('../img/leftarrow-hover.png')no-repeat 0 0;}

#rightarrow{left:0px;width:30px; border:0px solid black;background:url('../img/rightarrow.png')no-repeat 0 0px;}
#rightarrow a:hover{background: url('../img/rightarrow-hover.png')no-repeat 0 0;}

#facebook{width:62px; border:0px solid black; background:url('../img/facebook.png') 0 0}
#facebook a:hover{background: url('../img/facebook-on.png') 0 0;}

下图是我的解决方案目前的样子,它实际上是左侧 2 个像素到一点点,而不是居中。

最佳答案

有两个问题,我可以看到

  • 你有一个选择器 #social ul , 这应该只是 #socialul .否则它不适用于 <ul id="social">
  • ul是一个 block 级元素,所以它延伸到整个宽度 - 从蓝色边框可以看出 - 和 margin: auto没有效果。为此,您可以设置一个宽度来包围子项并调整 padding。据此
#social {
    width: 240px;
    list-style:none;
    margin:0 auto;
    padding-left: 20px;
}

JSFiddle用于测试。

作为替代方案,您可以增加最左边 child 的边距,例如facebook .

更新:

如果你想避免设置宽度,你可以使用@ajgiv 的建议并添加 text-align: center 到外部 div socialbox .但是,您还必须制作 social通过设置 display: inline-block 的内联元素

#socialbox {
    text-align: center;
}

#social {
    display: inline-block;
    padding-left: 15px;
}

参见 JSFiddle

关于html - 水平居中具有不同背景图像宽度的列表项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16447923/

相关文章:

php - HTML 电子邮件显示为代码而不是 css 页面

javascript:如何首先加载页面的一部分

html - 带有悬挂缩进的内联列表

CSS:将内联 block div置于其父div中

javascript - 目标 Windows、Mac、Linux 等

javascript - 我如何使 iframe 位置高于其余位置

jquery 选择的克隆不工作

javascript - 如何在选择标签中调用两个不同的操作

html - 跨行表格单元格中的按钮不会拉伸(stretch)

javascript - jQuery 滚动力不会滚动超过 450px