Pull to refresh

Идеальный способ вертикального выравнивания DIV в CSS

Давно искал способ вертикально выравнивать div. Не нашел ни одного вменяемого способа, одни костыли — через table, фиксированный height, JavaScript, и т.д. И вот, наконец, инспектируя чужой сайт, случайно заметил что div выровнен вертикально по центру, а костылей в коде вроде как нет. Думаю многим будет полезно.

<html>
<head>
<style type="text/css">
.box { position: fixed; top: 0px; left: 0px; width: 100%; height: 100%; display: block; text-align: center; overflow: auto; background-color: #999;  }
.box:before { display: inline-block; height: 100%; vertical-align: middle; content: ''; }
.dialog { position: relative; display: inline-block; vertical-align: middle; width: 300px; background-color: #FFF; color: #000; padding: 20px; text-align: left; }
</style>
</head>
<body>
<div class="box">
<div class="dialog">Блок по центру!</div>
</div>
</body>
</html>

Решающую роль здесь играет почему-то указанная ниже часть. Без неё не выравнивается:

.box:before { content: ''; }

Но данный способ работает в последних версиях Chrome, Firefox, и IE11. В связи с чем решение считаю идеальным. Спасибо за внимание!
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.
Change theme settings