如何水平居中未知宽度的无序列表?

时间:2009-11-08 02:41:18

标签: html css centering

通常在列表中显示的页脚中有一组链接,例如:

<div id="footer">
    <ul>
        <li><a href="#">Home</a></li>
        <li><a href="#">About</a></li>
        <li><a href="#">Contact</a></li>
    </ul>
</div>

我希望div#footer中的所有内容都水平居中。如果是段落,您只需轻轻说:p { text-align: center; }。或者,如果我知道<ul>的宽度,我可以说#footer ul { width: 400px; margin: 0 auto; }

但是,如果不在<ul>上设置固定宽度,如何将无序列表项居中?

编辑:澄清 - 列表项应该是彼此相邻的,而不是下面的。

6 个答案:

答案 0 :(得分:163)

解决方案,如果您的列表项可以是display: inline非常简单:

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

但是,很多时候您必须在display:block上使用<li>。在这种情况下,以下CSS将起作用:

#footer { width: 100%; overflow: hidden; }
#footer ul { list-style: none; position: relative; float: left; display: block; left: 50%; }
#footer ul li { position: relative; float: left; display: block; right: 50%; }

答案 1 :(得分:34)

使用以下css解决您的问题

#footer{ text-align:center; height:58px;}
#footer ul {  font-size:11px;}
#footer ul li {display:inline-block;}

注意:不要在li中使用float:left。它会让你的左边对齐。

答案 2 :(得分:12)

还有一个解决方案:

#footer { display:table; margin:0 auto; }
#footer li { display:table-cell; padding: 0px 10px; }

如果缩放文本,ul不会跳转到下一行。

答案 3 :(得分:8)

这取决于你是否意味着列表项目低于前一个或右边的,即:

Home
About
Contact

Home | About | Contact

第一个你可以做的只是:

#wrapper { width:600px; background: yellow; margin: 0 auto; }
#footer ul { text-align: center; list-style-type: none; }

第二种可以这样做:

#wrapper { width:600px; background: yellow; margin: 0 auto; }
#footer ul { text-align: center; list-style-type: none; }
#footer li { display: inline; }
#footer a { padding: 2px 12px; background: orange; text-decoration: none; }
#footer a:hover { background: green; color: yellow; }

答案 4 :(得分:2)

尝试将列表包装在div中,并为该div提供内联属性而不是列表。

答案 5 :(得分:0)

philfreo的答案很棒,它完美运行(跨浏览器,IE 7+)。只需在li中添加我的exp作为锚标记。

#footer ul li { display: inline; }
#footer ul li a { padding: 2px 4px; } /* no display: block here */

#footer ul li { position: relative; float: left; display: block; right: 50%; }
#footer ul li a {display: block; left: 0; }