如何垂直居中div?

Cra*_*ays 115 css alignment

我正在尝试制作一个小的用户名和密码输入框.

我想问一下,你如何垂直对齐一个div?

我有的是:

<div id="Login" class="BlackStrip floatright">
   <div id="Username" class="floatleft">Username<br>Password</div>
   <div id="Form" class="floatleft">
   <form action="" method="post">
      <input type="text" border="0"><br>
      <input type="password" border="0">
   </form>
   </div>
</div>
Run Code Online (Sandbox Code Playgroud)

如何使用id用户名和表单将div垂直对齐到中心?我试图把:

vertical-align: middle;
Run Code Online (Sandbox Code Playgroud)

在CSS中为id登录的div,但它似乎不起作用.任何帮助,将不胜感激.

And*_*y E 213

现代浏览器中最好的方法是使用flexbox:

#Login {
    display: flex;
    align-items: center;
}
Run Code Online (Sandbox Code Playgroud)

有些浏览器需要供应商前缀.对于没有Flexbox支持的旧版浏览器(例如IE 9及更低版本),您需要使用其中一种旧方法实现回退解决方案.

推荐阅读

  • 为了横向对齐,我还添加了"justify-content:center".(虽然情况不尽相同.) (11认同)
  • 要将div一个堆叠在另一个上面,请使用`flex-direction:column` (6认同)

pat*_*ood 91

这可以通过3行CSS完成,并且与IE9兼容(包括):

.element {
  position: relative;
  top: 50%;
  transform: translateY(-50%);
}
Run Code Online (Sandbox Code Playgroud)

示例:http://jsfiddle.net/cas07zq8/

信用

  • 打破响应式设计 (6认同)
  • 你能举例说明它如何以及为什么打破"响应式设计"作为一个整体?在我看来,它是否打破了响应式设计是你项目结构的问题. (2认同)
  • WOAH ..谢谢你,我不得不从滑块上移除flexbox,因为它在flex父和子之间插入额外的div,这是完美的解决方案. (2认同)

Lal*_*rya 77

您可以在另一个div中垂直对齐div.在JSFiddle上查看此示例或考虑下面的示例.

HTML

<div class="outerDiv">
    <div class="innerDiv"> My Vertical Div </div>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS

.outerDiv {
    display: inline-flex;  // <-- This is responsible for vertical alignment
    height: 400px;
    background-color: red;
    color: white;
}

.innerDiv {
    margin: auto 5px;   // <-- This is responsible for vertical alignment
    background-color: green;   
}
Run Code Online (Sandbox Code Playgroud)

.innerDiv"保证金必须是以下格式:margin: auto *px;

[在哪里,*是你想要的价值.]

display: inline-flex 支持HTML5的最新(更新/当前版本)浏览器支持.

它可能无法在Internet Explorer中工作:P :)

始终尝试为任何垂直对齐的div(即innerDiv)定义高度,以抵消兼容性问题.

  • @SteveBreese停止使用ie.http://breakupwithie8.com/ (21认同)
  • 这在IE浏览器中不起作用. (3认同)
  • 与IE9不兼容 (2认同)

Ove*_*ode 13

我参加派对的时间已经很晚了,但我自己想出了这个,这是我最喜欢的垂直对齐快速黑客之一.这很简单,很容易理解发生了什么.

您可以使用:beforeCSS属性插入div到父div的开始,给它display:inline-blockvertical-align:middle,然后给孩子DIV那些相同的属性.由于vertical-align是沿着一条线对齐,那些内联div将被视为一条线.

制作:beforediv height:100%,子div将自动跟随并对齐在非常高的"线"中间.

.parent:before, .child {
    display:inline-block;
    vertical-align:middle;
}
.parent:before {
    content:""; // so that it shows up
    height:100%; // so it takes up the full height
}
Run Code Online (Sandbox Code Playgroud)

这是演示我正在谈论的内容的小提琴.子div可以是任何高度,您永远不必修改其边距/填充.
而且这里有一个更强的解释小提琴.

如果你不喜欢:before,你总是可以手动输入一个div.

<div class="parent">
    <div class="before"></div>
    <div class="child">
        content
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

然后重新分配.parent:before.parent .before


ano*_*ard 11

如果您知道高度,可以使用绝对定位,margin-top如下所示:

#Login {
    width:400px;
    height:400px;
    position:absolute;
    top:50%;
    left:50%;
    margin-left:-200px; /* width / -2 */
    margin-top:-200px; /* height / -2 */
}
Run Code Online (Sandbox Code Playgroud)

否则,没有真正的方法可以用CSS垂直居中div


小智 5

在我的Firefox和Chrome中,这是这样的:

CSS:

display: flex;
justify-content: center;     // vertical align
align-items: center;         // horizontal align
Run Code Online (Sandbox Code Playgroud)