Div вертикальное выравнивание css

Я пытаюсь, чтобы мой текст был вертикально выровнен по середине div только для abc div.

Я хочу, чтобы высота в 50 пикселей и текст выравнивались по вертикали в середине 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>

Ответ 1

Вы можете использовать line-height: 50px;, вам не понадобится vertical-align: middle;.

Демо


Вышеуказанное не удастся, если у вас несколько строк, поэтому в этом случае вы можете обернуть текст с помощью span и использовать display: table-cell; и display: table; вместе с vertical-align: middle;, также не забудьте использовать width: 100%; для #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;
}

Другим решением, которое я могу здесь придумать, является использование свойства transform с translateY(), где Y, очевидно, обозначает Y-ось. Это довольно просто. Все, что вам нужно сделать, - установить положение элементов в absolute и более позднюю позицию 50% из top и перевести с нее ось с отрицательным -50%

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

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

Демо

Обратите внимание, что это не будет поддерживаться в старых браузерах, например IE8, но вы можете сделать IE9 и другие более старые версии браузера Chrome и Firefox с помощью префиксов -ms, -moz и -webkit соответственно.

Более подробную информацию о transform можно найти здесь .

Ответ 2

Это просто: дайте родительскому div this:

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>

Ответ 3

Старый вопрос, но в настоящее время 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>

Ответ 4

Я нашел это решение у Себастьяна Экстрема. Это быстро, грязно и работает очень хорошо. Даже если вы не знаете родительскую высоту:

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

Прочитайте полную статью здесь.

Ответ 5

Вы можете использовать высоту линии как высоту div. Но для меня лучшим решением является это → position:relative; top:50%; transform:translate(0,50%);

Ответ 6

Как добавить 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;
}

Fiddle, line-height

Или padding на #abc. Это результат с дополнением

Обновление

Добавьте в свой css:

#abc img{
   vertical-align: middle;
}

Результат. Надеюсь, это то, что вы ищете.

Ответ 7

Попробуйте следующее:

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

Ответ 8

Используйте CSS-свойство translateY для вертикального центрирования вашего текста в этом контейнере.

<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>

Отрегулируйте процент перевода в соответствии с вашими потребностями. Надеюсь это поможет

Ответ 9

 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>

Ответ 10

Этот код для вертикального среднего и горизонтального выравнивания по центру:

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