您有 4 个,可能是 5 个解决方案,其中一个添加到底部,因为它是来自原始和 js 的不同 css 的组合来设置高度:
- 使用表格单元格并将其内容垂直居中
display: table-cell; vertical-align: middle;
用作 div 的css
- 每次通过javascript更改div的高度时更新margin-top
- 使用 css3 flexbox(您需要使用特定于供应商的扩展,因此它不适用于某些较旧的浏览器)
使用旧式 flexbox 的简单示例 - chrome 版本 - 添加包装器 div 并将其样式设置为:
#wrapper { display: -webkit-box; -webkit-box-align: center; }
#wrapper > div { margin: auto; }
小提琴这个http://jsfiddle.net/gK7YU/
新样式的 flexbox - 也是 chrome 版本,您必须在最终产品中添加其他供应商前缀以及没有任何前缀的版本。
#wrapper { display: -webkit-flex; }
#wrapper > div { margin: auto; }
为此小提琴:http: //jsfiddle.net/LeHRD/
小提琴包含更多的 css 属性,因此您可以轻松查看正在发生的事情。
哦,对不起,您不需要包装器 div,您可以使用 flexbox 将任何内容垂直居中...好吧,无论如何我提出的解决方案可以结合使用,display: table-cell;
因此它也适用于旧浏览器。
您还可以使用具有指定高度的绝对定位 jsfiddle.net/N28AU/1
#wrapper { possition:relative }
#wrapper > div { position:absolute;top:0;right:0;bottom:0;left:0;margin: auto;}
如果您想避免负边距,您可以从包含的元素计算高度并通过 js 更新它。