143

我想保持#abc divat50px和 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>

4

11 回答 11

198

你可以使用line-height: 50px;,你不需要vertical-align: middle;那里。

演示


如果您有多行,上述操作将失败,因此在这种情况下,您可以使用 and 包装您的文本,span而不是使用display: table-cell;and 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 轴的transform属性。这很简单......您需要做的就是将元素位置设置为和稍后的位置,并从它的轴转换为负translateY()Yabsolute50%top-50%

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

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

演示

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

更多信息transform,可以参考这里

于 2013-09-06T02:54:56.553 回答
99

老问题,但现在 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>

于 2016-06-12T21:31:06.410 回答
96

很简单:给父 div 这个:

display: table;

并给孩子 div(s) 这个:

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>

于 2014-06-23T13:12:31.350 回答
49

我找到了 Sebastian Ekström 的这个解决方案。它很快,很脏,而且效果很好。即使您不知道父母的身高:

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

在此处阅读全文。

于 2014-11-19T22:43:35.933 回答
8

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

于 2015-01-13T09:00:33.357 回答
5

 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>

于 2019-06-21T12:14:59.870 回答
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;
}

结果。希望这就是你要找的。

于 2013-09-06T03:13:22.587 回答
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;
}
于 2016-07-29T10:05:28.493 回答
2

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

.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%);
}

于 2018-01-19T10:50:00.020 回答
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 百分比以满足您的需要。希望这可以帮助

于 2019-02-17T19:18:50.047 回答
1

.container { 
  height: 200px;
  position: relative;
  border: 3px solid green; 
}

.center {
  margin: 0;
  position: absolute;
  top: 50%;
  left: 50%;
  -ms-transform: translate(-50%, -50%);
  transform: translate(-50%, -50%);
}
<h2>Centering Div inside Div, horizontally and vertically without table</h2>
<p>1. Positioning and the transform property to vertically and horizontally center</p>
<p>2. CSS Layout - Horizontal & Vertical Align</p>

<div class="container">
  <div class="center">
    <p>I am vertically and horizontally centered.</p>
  </div>
</div>

于 2020-12-22T21:24:33.367 回答