在另一个元素内垂直居中两个div

14

我有两个div想要垂直居中在另一个div中。目前我的代码是:

http://jsfiddle.net/5vpA3/1/

现在我明白这里发生了什么,但我希望左侧div在容器内垂直对齐,右侧div也是如此。但它们作为一对而不是单独地垂直对齐。我尝试了各种方法,但似乎无法使其工作。

它们是固定高度还是可变高度? - Michael Rose
它们实际上都是可变高度的。因此,基本上,容器 div 的高度将与最大的内部 div 相同,较小的 div 应垂直居中。如果必要的话,div 可以是固定高度,但我们不希望设置 margin-top 等属性。 - anothershrubery
我假设从你使用 display: table-cell 的方式来看,你不关心支持 IE7? - thirtydot
嗯...IE7兼容性不是首要问题。但支持它会很好。一个针对IE7的解决方案和一个针对新版本浏览器的解决方案都会很不错。然后我们再看看最佳实现方式。 - anothershrubery
2个回答

24

实时演示

  • Remove float: left from #left and #right.
  • Instead, use display: inline-block:

    #left, #right {
        display: inline-block;
        vertical-align: middle;
    }
    
  • Due to using display: inline-block, you have to deal with the whitespace issue. I chose to remove the whitespace in the HTML between </div> and <div id="right">. See here for what happens if you don't do that. Removing the whitespace really is the easiest fix, but there are other ways.

我选择对“inline-block”空格问题进行如此详细的解释,是基于你之前的问题。链接 - thirtydot
感谢您的解释。我已经在实际的SharePoint页面中尝试了这个实现,但似乎并没有起作用,尽管我可以从您的fiddle中看到它应该做什么。就像div是作为块而不是内联块执行一样。请参见http://jsfiddle.net/5vpA3/24/,了解它在我的页面上的外观。IE开发工具显示它具有display:inline-block,所以我看不到问题所在。 - anothershrubery
当你按下F12并打开开发者工具时,使用的是哪个“文档模式”? - thirtydot
1
天啊,它一直在兼容模式下显示... >:( 现在可以工作了! - anothershrubery
如果现在您想让文本“LEFT”和“RIGHT”居中显示在蓝色和红色框内,该怎么办? - user765368
@user765368:我发现您在撰写该评论后在Stack Overflow上提出了几个问题。还需要帮助吗? - thirtydot

6

使用Flexbox解决垂直居中问题:

#container {
    display: flex;
    align-items: center;
}

OP的原始代码被修改了:http://jsfiddle.net/o3pmyb8c/

如果您也想水平居中,可以添加justify-content: center;


糟糕,我把我的橫向做了,現在還早,需要咖啡因 :P - wdm
这些实际上是相互叠加显示的。 - Gubatron
1
@Gubatron修复了(9年后) - wdm

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