вертикальне вирівнювання середини в <div>


126

Я хочу , щоб зберегти висоту #abc divв 50pxі текст для вирівнювання по вертикалі в середині 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>

Відповіді:


183

Ви можете використовувати 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 Axis. Це досить прямо вперед ... Все, що вам потрібно зробити, - це встановити положення елементів у 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, ви можете звернутися тут .


Мені потрібно було знати це просте рішення по висоті ліній протягом усього свого професійного життя, і про нього я дізнався лише зараз. Дякую, містере Чуже.
Пляж Натан

94

Це просто: дайте батьківському діві це:

display: table;

і дайте дитині діви (и) це:

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
це погано, оскільки це використовується таблиця як хак, вона може працювати в більшості випадків, але коли ви хочете змінити ширину 'таблиці', то вона не буде працювати належним чином (що у мене виникає проблема з цим рішенням )
Кевін Простий

Мені не потрібно було додавати display:table;батьків до батьків, щоб він працював.
VincentPerrin.com

Можливо, це злом ... але це РОБОТИ, і більшість інших рішень працюють лише в конкретних випадках і часто не є корисними в нашому випадку.
Джеррі

Перевага цього рішення: працює з усіма видами вмісту (не лише з текстом, а не лише з одним рядком ...)
Джеррі

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; вирівнювати-елементи: центр; Це краще спрацьовує, коли у вас є більше одного об’єкта для вирівнювання вертикально разом
Леонардо Дага

Які браузери підтримує CSS3 ?
Кікенет

@Kiquenet, 92% світового ринку caniuse.com/#search=align-items
Daniel Kucal

Perfekt! Просто та легко .. просто додайте до контейнера
Ujjwal Singh

47

Я знайшов це рішення Себастьян Екстрем. Це швидко, брудно і працює дуже добре. Навіть якщо ви не знаєте зріст батька:

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

Прочитайте повну статтю тут .


3
Це може розмити речі, оскільки результат перетворень може призвести до того, що вони розташовуються у півпіксельних місцях.
Кевін Вілер

1
Існує оновлення публікації, націленої на цю проблему. На батьків transform-style: preserve-3d;:!
Андрій

8

Ви можете використовувати висоту лінії, велику як висоту діва. Але для мене найкращим рішенням є це ->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

2

Спробуйте це:

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

Ще один метод центрування діва:

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


Поясніть це будь ласка!
Szabolcs Páll

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>

Відрегулюйте відсоток перекладу відповідно до ваших потреб. Сподіваюся, це допомагає


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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.