显示:使用两个元素而不是三个元素的表格单元格居中



我有一个工作示例,使用三个元素垂直居中未知高度的元素:

<section>
    <div>
        <img src="http://placehold.it/100x100"/>
    </div>
</section>​

和 CSS:

section {
  display: table;
  width: 100%;
  height: 100%;
  position: absolute;
  text-align: center;
}
div {
  display: table-cell;
  vertical-align: middle;
}

这里还有一个 JSFiddle 示例:http://jsfiddle.net/Y6KS9/

但是,如果可能的话,我想避免使用不必要的包装器。例如,让 img 本身显示为表格单元格:

div {
  display: table;
  width: 100%;
  height: 100%;
  position: absolute;
  text-align: center;
}
img {
  display: table-cell;
  vertical-align: middle;
}
​

但是这不起作用 - 请参阅 http://jsfiddle.net/U2c9R/的 JSFiddle 示例 - img 不在div 内居中。

是否可以仅使用两个元素将未知大小的图像在其父级中垂直居中?

编辑:我知道Flexbox,并打算在IE9死亡后完全抛弃表格单元格黑客。但是现在我需要支持旧浏览器。

您可以尝试使用 CSS3 Flexible Box 模型。

您应该检查浏览器的可用性。正如您从-webkit供应商前缀中看到的那样,我的示例目前仅适用于基于-webkit的渲染引擎。但我很确定它可以在大多数现代浏览器中工作。

以下是支持灵活盒模型的浏览器的概述: http://caniuse.com/#feat=flexbox

div {
    display: -webkit-box;
    -webkit-box-pack: center;
    -webkit-box-align: center;
    height:100%;
    width:100%;
    position:absolute;
}

示例:http://jsfiddle.net/U2c9R/4/

更新

对于CSS3灵活盒子模型的跨浏览器支持,您可以使用Modernizr和适当的Polyfill,它增加了对IE 6-9Opera 10.0+的支持。唯一的提示是,如果没有JavaScript,这是行不通的。但也许这是一种选择?

相关内容

最新更新