当前位置: 首页 > 面试题库 >

使用margin:auto垂直对齐div

郭阳曜
2023-03-14
问题内容

所以我知道如果使用,我们可以将div水平居中margin:0 auto;。应该按照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>

问题答案:

您不能使用:

vertical-align:middle因为它是不是适用于块级元素

margin-top:auto并且margin-bottom:auto因为它们的使用值将计算为零

margin-top:-50%因为基于百分比的边距值是相对于包含块的宽度计算的

实际上,文档流和元素高度计算算法的性质使得不可能使用边距将元素垂直放置在其父元素内部居中。每当垂直边距的值更改时,都会触发父元素高度的重新计算(重新流),这又将触发原始元素的重新居中…使其成为无限循环。

您可以使用:

像这样的一些变通办法可以满足您的方案;这三个元素必须像这样嵌套:

.container {
    display: table;
    height: 100%;
    position: absolute;
    overflow: hidden;
    width: 100%;
}
.helper {
    #position: absolute;
    #top: 50%;
    display: table-cell;
    vertical-align: middle;
}
.content {
    #position: relative;
    #top: -50%;
    margin: 0 auto;
    width: 200px;
    border: 1px solid orange;
}
<div class="container">
    <div class="helper">
        <div class="content">
            <p>stuff</p>
        </div>
    </div>
</div

根据Browsershot,JSFiddle可以正常工作。



 类似资料:
  • 垂直对齐 1. grid-template-areas 属性值保持换行,并使用空格保持每列垂直对齐。 例如: .foo { grid-template-areas: "header header" "nav main" "footer ...."; } 2. grid、grid-template

  • 问题内容: 我在浮动div中有一个img,但我不知道如何垂直居中。 垂直对齐:当然中间不起作用。 问题答案: 要在父元素中垂直对齐文本,并谨记的是一个内联元素等行为 类似 文本,你可以简单地设置到父元素: 。

  • 在CSS中,行框的高度总是足以容纳它包含的所有行内级框,当一个行内级框 B 的高度小于包含它的行框高度时,则由 vertical-align属性 来决定B在行框中垂直对齐的位置。因此,vertical-align属性只对行内级元素有效,对块级元素无效。并且,该属性不能被子元素继承。 在垂直对齐时,行内非替换元素的行内级框是由 line-height 的高度定义的框,即在内容区的上下各添加半行距后的

  • 问题内容: 我有一个包含图像和ap标签的div(如下所示)。我想根据段落的多少行在div的中间垂直对齐图像。垂直对齐不起作用。我现在正在使用JavaScript找出要添加到margin- top的数量,但是宁愿使用CSS。有任何想法吗? 问题答案: 尝试将元素的属性设置为图像的高度,例如: 编辑: 刚意识到我读错了问题,却错过了多行的事实。尝试的一种选择是完全删除元素,并将其设置为of的,使用的o

  • 问题内容: 我试图在一个JPanel中垂直对齐(居中)两个JLabel。 我尝试使用setAligmentY()失败。这两个标签始终显示在JPanel的顶部。 UPD:标签应该像使用FlowLayout那样彼此相邻放置,但应位于JPanel的中间。 问题答案: 使用具有默认约束的。这是一个小的演示代码:

  • 问题内容: 我可以水平对齐div,所有内容看起来都不错。寻找垂直对齐不包含任何表格的div。我尝试在#container内将边距位置设置为某些负值,但是这种方法可行。我知道CSS还不支持吗? 这是我的标记: 运行上面的代码段,然后单击“整页”以查看其当前外观。基本上,它在水平方向上看起来不错,但是现在我需要它在页面中也垂直居中。 我要垂直对齐的元素是#container div。该效果将迫使整个d