总而言之,在容器中垂直对齐内容的方法很少。这些是主要的方法(如果你现在有一些完全不同的方法,你提供例子会非常慷慨——我会在这里合并)
- 使用
position
和transform
属性 - http://jsfiddle.net/EjV4V/3/这个很好,但对我来说,有点过头了,特别是如果我们考虑渲染优化问题。适用于所有现代浏览器,不适用于 IE7。 - 使用
display: inline-block
带有一个附加辅助块的属性 - http://jsfiddle.net/mmxm4/3/。因为使用了额外的 DOM 元素,所以不认为这种方法很好。在 IE7 中不起作用。值得一提的是(感谢@nclenorton 提到这一点),我们可以使用:before
或:after
生成内容。但是,再一次 -不在 IE7 中。 - 使用
display: table
和display: table-cell
属性 - http://jsfiddle.net/Ppk3p/2/。有时这种方法很简洁,有时则不然。请注意,与提供的其他示例相反,子单元格宽度存在问题。无论如何,在IE7中不起作用。 使用
display: box
- http://jsfiddle.net/9Phgg/9/ - 这是处理事情的最性感方式,但正如我们所知,规范并非 100% 完成。此外,Opera 不支持弹性盒子。是的,当然,甚至不要考虑在 IE7 中尝试这样的事情。我的问题是:“关于上述所有方法在 IE7 中都将失败的事实,在所有现代浏览器和IE7 中垂直居中元素的最通用、优雅、简单和正确的方法是什么?”。
我有一种强烈的感觉,helas,虽然现在是 2012 年,但使用表格布局仍然是答案。我见过一些奇特的方法,例如使用
position: absolute
甚至是 javascript 表达式,但这远非优雅和简单。
经验丰富的 html 开发人员,如果我错了,请纠正我。
UPD: 实际上,还有另一种方法,但我发现它完全错误且不可行,原因有很多。但值得一提。默认情况下,按钮中的任何内容都垂直居中,所以请注意 - http://jsfiddle.net/s5nz4/3/。这将在 IE7 中工作,但我们都是成年人,我希望,理解这是不合适的 )))