Css 保证金:自动不';如果Firefox中的显示框不可用

Css 保证金:自动不';如果Firefox中的显示框不可用,css,firefox,flexbox,Css,Firefox,Flexbox,在Firefox(8.0版)中,如果我将一个元素指定为display:-moz-box和margin:auto,则该元素不再位于其父元素的中心。它在铬合金中工作。这是Firefox的问题,还是我遗漏了什么?我怎样才能解决这个问题 一种解决方法是添加一个包装器div元素,并将其显示设置为block,但这很难看。我创建了一个最小的示例,并在Firefox 7.0.1 unde ubuntu下对其进行了测试: <div style="border:1px solid blue;width:200

在Firefox(8.0版)中,如果我将一个元素指定为
display:-moz-box
margin:auto
,则该元素不再位于其父元素的中心。它在铬合金中工作。这是Firefox的问题,还是我遗漏了什么?我怎样才能解决这个问题


一种解决方法是添加一个包装器
div
元素,并将其
显示设置为
block
,但这很难看。

我创建了一个最小的示例,并在Firefox 7.0.1 unde ubuntu下对其进行了测试:

<div style="border:1px solid blue;width:200px;height:200px;float:left">
<div style="display:block; margin:auto;width:100px;height:50px;">display: block</div>
</div>

<div style="border:1px solid blue;width:200px;height:200px;float:left">
<div style="display:-moz-box; margin:auto;width:100px;height:50px;">display: -moz-box</div>
</div>

显示:块
显示:-moz框

结果如下。希望这些信息对您有所帮助。

-moz-box
是Firefox中XUL框的显示类型。它们不遵循正常的CSS框模型,所以在使用自动边距时不要自动居中。所以这里的行为在Firefox中是正确的:这只是XUL框的行为

请注意,
-webkit-box
(我想这就是你所说的“在Chrome中工作”)是一个完全不同的东西:它是一个非常早期的CSS flexbox草案的实现。它与
-moz-box
以及当前的flexbox草稿有一些表面特征,但在其他方面完全不同


现在真正的问题是。。。你到底想做什么?

margin:auto影响
flex
元素的方式应与影响
元素的方式相同。Firefox的实现是一个早期的实现,目前还不符合规范。我已经被告知,新的实现将在版本18左右发布。

我们可以看到您的所有代码吗?我无法在Firefox中重现这个问题。谢谢,@Simon!这很好地说明了这个问题。谢谢你的解释,@BorisZbarsky!所以我有一个
我想放在
的中心,还有两个块元素我想水平放在
的中心。我想我也可以用其他方式来做,比如使用
inline block
。是的,
inline block
听起来是个不错的方法。在IE和Opera中工作,而不仅仅是Gecko和WebKit,这会带来额外的好处。
-WebKit-box
是一件完全不同的事情吗?根据MDN。
margin:auto
在Firefox中不起作用的真正原因是Firefox将所有FlexBox视为内联FlexBox。忽略我的评论。从bug报告中可以清楚地看出,你比我更有资格谈论这个问题p您引用的规范实际上是关于
margin:auto
对元素中具有
display:flex
的内容的影响——它没有说明它在
display:flex
元素本身上的行为。所以我认为规范的这部分内容与这个问题无关。(此外,这个问题是关于
-moz-box
,而不是
flex
——正如Boris在回答中所指出的,这两个布局模型充其量只是远亲,一般不应该期望它们具有相同的行为。)