所以我知道如果我们使用 margin:0 auto;
,我们可以水平居中 div 。 margin:auto auto;
应该按照我认为的方式工作吗?也垂直居中?
为什么 vertical-align:middle;
也不起作用?
.black {
position:absolute;
top:0;
bottom:0;
left:0;
right:0;
background:rgba(0,0,0,.5);
}
.message {
background:yellow;
width:200px;
margin:auto auto;
padding:10px;
}
<div class="black">
<div class="message">
This is a popup message.
</div>
</div>
原文由 savinger 发布,翻译遵循 CC BY-SA 4.0 许可协议
2020 年 8 月更新
尽管下面的有用信息仍然值得一读,但我们已经使用 Flexbox 有一段时间了,所以按照 这个答案 使用它。
你不能使用:
vertical-align:middle
因为 它 不适 用于块级元素margin-top:auto
和margin-bottom:auto
因为 它们使用的值将计算 为零margin-top:-50%
因为 基于百分比的边距值是相对于包含块的 宽度 计算的事实上,文档流和 元素高度计算算法 的本质使得不可能使用边距来使元素在其父元素中垂直居中。每当更改垂直边距的值时,它将触发父元素高度重新计算(重新流动),这反过来又会触发原始元素的重新居中……使其成为无限循环。
您可以使用:
像这样的一些解决方法 适用于您的场景;这三个元素必须像这样嵌套:
根据 Browsershot, JSFiddle 可以正常工作。