Лучшее решение (на мой взгляд) - использовать абсолютное позиционирование, чтобы поместить верхний левый угол элемента на 50% / 50%, а затем сместить элемент обратно в центр, используя отрицательные поля.Единственным недостатком является то, что вы должны указать ширину и высоту элемента.Вот пример:
HTML:
<div id="centerme">
Hello, world!
</div>
CSS:
#centerme
{
position: absolute;
left: 50%;
top: 50%;
/* You must set a size manually */
width: 100px;
height: 50px;
/* Set negative margins equal to half the size */
margin-left: -50px;
margin-top: -25px;
background-color: cornflowerblue;
}
Вот демонстрация на jsfiddle: http://jsfiddle.net/UGm2V/
Если вам действительно требуется, чтобы центрированный контент имел динамическую высоту, есть более продвинутое решение.Имейте в виду, что это не будет работать в старых браузерах IE.HTML-код выглядит следующим образом:
<div id="outter-container">
<div id="inner-container">
<div id="centred">
<p>I have a dynamic height!</p>
<p>Sup!</p>
</div>
</div>
</div>
Внешний контейнер необходим для покрытия ширины и высоты страницы.Это блочный элемент с абсолютным позиционированием.
Внутренний контейнер на самом деле является таблицей!Это решается с помощью свойства display: table
css.Выигрыш в том, что на самом деле вам не нужен никакой HTML-код таблицы.
#centred div - последний обязательный элемент.Он по-прежнему покрывает 100% ширины и высоты страницы, но все, что находится внутри, будет отцентрировано как по вертикали, так и по горизонтали.Это css, который вам нужен, с объяснениями:
/*
An outter container is needed because the table
won't cover the page width and height on it's own
*/
#outter-container
{
position: absolute;
top: 0px;
right: 0px;
bottom: 0px;
left: 0px;
}
/*
The inner container is a table which is set to
cover the width and height of the page.
*/
#inner-container
{
display: table;
width: 100%;
height: 100%;
}
/*
This table cell will cover 100% of the page width
and height, but everything placed inside it will
be placed in the absolute centre.
*/
#centred
{
display: table-cell;
vertical-align: middle;
text-align: center;
}
И, конечно, вот демонстрация jsfiddle для этого: http://jsfiddle.net/N7ZAr/3/