Edit:
Если вопрос научил меня чему-то, то это так: не меняйте то, что уже работает :) 1003 *
Я предоставляю (почти) дословную копию того, как это было обработано на http://www.jakpsatweb.cz/css/css-vertical-center-solution.html - это сильно взломано для IE, но предоставляет чистый способ CSS ответить на вопрос:
.container {display:table; height:100%; position:absolute; overflow:hidden; width:100%;}
.helper {#position:absolute; #top:50%;
display:table-cell; vertical-align:middle;}
.content {#position:relative; #top:-50%;
margin:0 auto; width:200px; border:1px solid orange;}
Скрипка: http://jsfiddle.net/S9upd/4/
Я пробежал по браузерным снимкам, и это нормально; если не для чего иного, я оставлю оригинал ниже, так что обработка процентной маржи в соответствии со спецификацией CSS увидит свет.
Оригинал:
Похоже, я опоздал на вечеринку!
Есть несколько комментариев выше, которые предполагают, что это вопрос CSS - разделение интересов и все. Позвольте мне предварить это, сказав, что CSS действительно выстрелил себе в ногу на этом. Я имею в виду, как легко это сделать:
.container {
position:absolute;
left: 50%;
top: 50%;
overflow:visible;
}
.content {
position:relative;
margin:-50% 50% 50% -50%;
}
Правильно? Левый верхний угол контейнера будет в центре экрана, а с отрицательными полями содержимое будет волшебным образом появляться в абсолютном центре страницы! http://jsfiddle.net/rJPPc/
Неверно! Горизонтальное расположение в порядке, но вертикально ... О, я вижу. По-видимому, в css при установке верхних полей в% значение рассчитывается как процент всегда относительно width содержащего блока . Как яблоки и апельсины! Если вы не доверяете мне или Mozilla doco, поиграйте со скрипкой выше, отрегулировав ширину контента, и удивитесь.
Теперь, когда CSS был моим хлебом с маслом, я не собирался сдаваться. В то же время я предпочитаю что-то более простое, поэтому я позаимствовал выводы чешского CSS-гуру и превратил его в рабочую скрипку. Короче говоря, мы создаем таблицу, в которой вертикальное выравнивание установлено на середину:
<table class="super-centered"><tr><td>
<div class="content">
<p>I am centered like a boss!</p>
</div>
</td></tr></table>
А затем позиция контента настраивается со старым добрым margin: 0 auto; :
.super-centered {position:absolute; width:100%;height:100%;vertical-align:middle;}
.content {margin:0 auto;width:200px;}
Рабочая скрипка, как и было обещано: http://jsfiddle.net/teDQ2/