如何让 float: left 的 div 内容居中显示?

16

我发现了这篇文章,并且决定喜欢他们对链接和按钮的样式设置。因此我使用了该文章中的CSS...

.buttons a, .buttons button{
    display:block;
    float:left;
    margin:0 7px 0 0;
    background-color:#f5f5f5;
    border:1px solid #dedede;
    border-top:1px solid #eee;
    border-left:1px solid #eee;

    font-family:"Lucida Grande", Tahoma, Arial, Verdana, sans-serif;
    font-size:100%;
    line-height:130%;
    text-decoration:none;
    font-weight:bold;
    color:#565656;
    cursor:pointer;
    padding:5px 10px 6px 7px; /* Links */
}
.buttons button{
    width:auto;
    overflow:visible;
    padding:4px 10px 3px 7px; /* IE6 */
}
.buttons button[type]{
    padding:5px 10px 5px 7px; /* Firefox */
    line-height:17px; /* Safari */
}
*:first-child+html button[type]{
    padding:4px 10px 3px 7px; /* IE7 */
}
.buttons button img, .buttons a img{
    margin:0 3px -3px 0 !important;
    padding:0;
    border:none;
    width:16px;
    height:16px;
}

然后我有一排按钮,我想这样使用...

<div class="buttons">
    <a href="/password/reset/"><img src="pict1.png" class="positive" alt=""/>Button 1</a>
    <a href="/password/reset/"><img src="pict2.png" alt=""/>Button 2</a>
    <a href="/password/reset/"><img src="pict3.png" class="negative" alt=""/>Button 3</a>
</div>

请看这个例子:http://reljac.com/csstest.php

但是那一排按钮可能需要居中对齐,而不是全部靠左或靠右。如果我改变CSS为...

.buttons a, .buttons button{
    /*display:block;
    float:left;*/
    margin:0 7px 0 0;

当存在图片时,特别是在IE 6、7和8中,按钮的显示不再正确。

请参见此示例:http://reljac.com/csstest_wo.php

我可以将浮动更改为右对齐以使按钮右对齐,但我无法想出如何使它们居中对齐(就像在<td></td>中一样)。

因此,简而言之,我希望仍然使用原始样式,但如果需要,也能够使按钮居中对齐。

2个回答

20

尝试将以下内容添加到CSS中:

.buttons
{
    text-align:center;
    margin: 0px auto 0px auto;
}

auto属性可以使两侧的边距相等。而text-align属性是为了兼容老版本的浏览器而提供的解决方案。

编辑:

在按钮周围添加一个名为“buttonwrapper”的额外div,然后应用以下CSS。

.buttonwrapper
{
    position:relative;
    float:left;
    left:50%;
}

.buttons
{
    position:relative;
    float:left;
    left:-50%;
}

方法取自 http://www.pmob.co.uk/temp/centred-float4.htm,已采用但未经过测试。


这是正确的...不过,我可能甚至不会费心去处理text-align这个东西,因为任何需要它的浏览器都不再拥有显著的市场份额。 - Noldorin
所以我将整个选择器添加到了我的CSS底部,但在IE8中没有看到任何区别(reljac.com/csstest.php)。我错过了什么吗? - Jason
你是对的。查看http://www.pmob.co.uk/temp/centred-float4.htm很有帮助。我已经修改/将要修改答案。 - Eric
重要的是不要在包装器上设置宽度 FYI :D - Tom Roggero

1
жҲ‘еҸ‘зҺ°еҪ“дҪ жңүдёҖдёӘе·Ұжө®еҠЁзҡ„зҲ¶зә§divе’ҢдёҖдёӘдҪ жғіиҰҒеұ…дёӯзҡ„еӯҗзә§divж—¶пјҢеҫҲеӨҡж—¶еҖҷдәә们дјҡеҝҳ记继жүҝгҖӮ
HTML:
<div class="parent">
     <div class="child">
          Text
     </div>
</div>

CSS:

.parent {
  float: left;
  width: 300px;
}

.child {
  float:        none; /* <-- IMPORTANT! */
  width:        200px;
  margin-left:  auto;
  margin-right: auto;
}

重要提示: 继承规则表明子 div 也会向左浮动。因此,请确保子 div 没有浮动,然后像往常一样设置 margin: auto。


float 不是一个可以被继承的属性。 - JJJ

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