Как центрировать div вертикально?

У меня есть div, который я хочу центрировать по горизонтали и по вертикали.

Для горизонтальной проблемы все отлично, но у меня проблема с вертикальным выравниванием.

Я пробовал это:

#parent {
    display: table;
}

#child {
    display: table-row;
    vertical-align: middle;
}

но это не работает.

Ответы

Ответ 1

Если вам нужно только поддерживать браузеры, поддерживающие transform (или его префиксные версии поставщика), используйте этот один странный старый трюк для вертикального выравнивания элементов.

#child {
    position: relative;
    top: 50%;
    transform: translateY(-50%);
}

Если вам нужно поддерживать старые браузеры, вы можете использовать их комбинацию, но они могут быть болью из-за различий в рендеринге block vs table.

#parent {
    display: table;
}

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

Если ваша высота установлена, и вам нужно поддерживать те действительно старые, надоедливые браузеры...

#parent {
   position: relative;
}

#child {
   height: 100px;
   position: absolute;
   top: 50%;
   margin-top: -50px;
}

Если высота не установлена, существует способ .

Посмотрите на jsFiddle.

Ответ 2

Имея родительское свойство as, display:table и дочернее свойство как display: table-cell и vertical-align: middle, работали для меня.

Ответ 3

Во-первых, обработка разметки без таблиц в виде таблиц (с дисплеем: таблица и друзья) не является межсерверным. Я не знаю, какие браузеры вам нужно поддерживать, но, конечно, IE6 этого не сделает. Но, если ваш целевой браузер делает все поддержку отображения: table, я могу дать вам несколько советов.

Вертикальный подход к центрированию, который вы ищете (с использованием макета таблицы), зависит от наличия TD с вертикальным выравниванием: среднее, а затем внутри этого элемента с одним блоком будет вертикально центрироваться. Поэтому я думаю, что вы хотите:

#parent { display:table-cell; vertical-align:middle; }
#child { /* nothing necessary, assuming it a DIV it already display:block */ }

Хорошо использовать табличную ячейку без окружения table-row и таблицы, браузер запрашивает необходимые элементы для упаковки таблицы.

Ответ 4

вот еще один способ, когда вы не знаете внутренний размер div или что-то еще, вы можете использовать% здесь и там, чтобы исправить "центрирование"....

Идея заключается в том, что ваше верхнее значение составляет половину высоты вашего дочернего элемента, чтобы создать иллюзию центрирования

Здесь код:

<div id="parent">
    <div id="child">
            hello
    </div>
</div>

и для стиля:

#parent {
   position: relative;
    height: 300px;
    width:200px;
    background-color:green;
}

#child {
   height: 50%;
   width: 50%;
    position:relative;
    top:25%;
    left:25%;
   background-color:red;
}

Здесь вы можете увидеть его в действии http://jsfiddle.net/Wabxv/