<div>中的垂直对齐中间


126

我想保持#abc divat 50px和text 的高度在的中间垂直对齐div

body{
  padding: 0;
  margin: 0;
  margin: 0px auto;
}

#main{
  position: relative;
  background-color:blue;
  width:500px;
  height:500px;
}

#abc{
  font:Verdana, Geneva, sans-serif;
  font-size:18px;
  text-align:left;
  background-color:#0F0;
  height:50px;
  vertical-align:middle;
}
<div id="main">
 <div id="abc">
     asdfasdfafasdfasdf
 </div>
</div>

Answers:


182

您可以使用line-height: 50px;,而无需vertical-align: middle;那里。

演示版


如果您有多行代码,则上述操作将失败,因此在这种情况下,您可以使用span和而不是display: table-cell;和与display: table;一起包装文本vertical-align: middle;,也不要忘记使用width: 100%;for#abc

演示版

#abc{
  font:Verdana, Geneva, sans-serif;
  font-size:18px;
  text-align:left;
  background-color:#0F0;
  height:50px;
  display: table;
  width: 100%;
}

#abc span {
  vertical-align:middle;
  display: table-cell;
}

我在这里可以想到的另一种解决方案是在明显代表Y轴的地方使用transformproperty 。这非常简单...您所要做的就是将元素位置设置为,然后再从位置进行设置,并以负数从其轴进行平移translateY()Yabsolute50%top-50%

div {
  height: 100px;
  width: 100px;
  background-color: tomato;
  position: relative;
}

p {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
}

演示版

请注意,较旧的浏览器(例如IE8)将不支持此功能,但是您可以分别使用-ms, -moz-webkit前缀来制作IE9和其他较旧版本的Chrome和Firefox浏览器。

有关更多信息transform,您可以在这里参考。


我需要在整个职业生涯中都知道这种简单的行高解决方案,而现在才知道。谢谢你,外星先生。
弥敦海滩

94

很简单:给父div这个:

display: table;

并给孩子div:

display: table-cell;
vertical-align: middle;

而已!

.parent{
    display: table;
}
.child{
    display: table-cell;
    vertical-align: middle;
    padding-left: 20px;
}
<div class="parent">
    <div class="child">
        Test
    </div>
    <div class="child">
        Test Test Test <br/> Test Test Test
    </div>
    <div class="child">
        Test Test Test <br/> Test Test Test <br/> Test Test Test
    </div>
<div>


6
这很糟糕,因为这是将表用作hack,它在大多数情况下都可以使用,但是当您想更改“表”的宽度时,它就无法正常工作(此解决方案现在让我遇到了问题)
凯文·

我不需要将其添加display:table;到父项即可使其正常工作。
VincentPerrin.com 2015年

也许这是一个破解...但是它起作用,并且大多数其他解决方案仅在特定情况下有效,在我们的情况下通常不可用。
杰里(Jerry)

该解决方案的优势:适用于所有类型的内容(不仅适用于文本,而且不仅适用于一行...)
Jerry

77

古老的问题,但是如今 CSS3使垂直对齐变得非常简单

只需添加到#abc以下CSS:

display:flex;
align-items:center;

简单演示

原始问题演示已更新

简单的例子:

.vertical-align-content {
  background-color:#f18c16;
  height:150px;
  display:flex;
  align-items:center;
  /* Uncomment next line to get horizontal align also */
  /* justify-content:center; */
}
<div class="vertical-align-content">
  Hodor!
</div>


3
我也建议:display:grid; align-items:center; 当您有多个对象垂直对齐时,效果更好
Leonardo Daga

哪些浏览器支持 CSS3
Kiquenet '18

@Kiquenet,占全球市场的92%caniuse.com
#search=

完美!简单容易..只需添加到容器中
Ujjwal Singh

47

我通过SebastianEkström找到了这个解决方案。它快速,干净而且运行良好。即使您不知道父母的身高:

.element {
  position: relative;
  top: 50%;
  -webkit-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
  transform: translateY(-50%);
}

此处阅读全文。


3
这可能会使事物模糊,因为变换的结果可能导致事物定位在半像素位置。
凯文·惠勒

1
针对该问题的帖子有更新。在父:transform-style: preserve-3d;
安德里(Andry)

8

您可以将Line height用作div的高度。但是对我来说最好的解决方案是->position:relative; top:50%; transform:translate(0,50%);


4

如何添加line-height

#abc{
  font:Verdana, Geneva, sans-serif;
  font-size:18px;
  text-align:left;
  background-color:#0F0;
  height:50px;
  vertical-align:middle;
  line-height: 45px;
}

小提琴,行高

padding继续#abc这是填充的结果

更新资料

添加您的CSS:

#abc img{
   vertical-align: middle;
}

结果。希望这是您想要的。


不能完全按照我希望的方式工作,当您更改高度或线高时,出现了一些错误。已经有了答案,无论如何还是要感谢
Sickest 2013年

2

试试这个:

.main_div{
    display: table;
    width: 100%;
}
.cells {
    display: table-cell;
    vertical-align: middle;
}

将div居中的另一种方法:

<div id="parent">
    <div id="child">Content here</div>
</div>

#parent {position: relative;}

#child {
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    width: 50px;
    height: 100px;
    margin: auto;
}

2

 div {
    height:200px;
    text-align: center;
    padding: 2px;
    border: 1px solid #000;
    background-color: green;
}

.text-align-center {
    display: flex;
    align-items: center;
    justify-content: center;
}
<div class="text-align-center"> Align center</div>


请解释一下!
SzabolcsPáll19年

1

使用translateY CSS属性将文本垂直放置在容器中

<style>
.centertext{

    position: relative;
    top: 50%;
    transform: translateY(40%);

}
</style>

然后将其应用于您的包含DIV

  <div class="centertext">
        <font style="color:white; font-size:20px;">   Your Text Here </font>
  </div>

调整translateY百分比以适合您的需求。希望这可以帮助


1

此代码适用于垂直中间和水平中心对齐,但未指定固定高度:

.parent-class-name {
  position: relative;
}

.className {
  position: absolute;
  top: 50%;
  left: 0;
  right: 0;
  margin: 0 auto;
  transform: translateY(-50%);
  -moz-transform: translateY(-50%);
  -webkit-transform: translateY(-50%);
}

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.