Выравнивание div по центру экрана по вертикали и горизонтали

Вертикально выровненные голуби

Голуби на картинке поста выбраны не случайно, если обратить внимание на того, что справа, даже он уже выровнен по вертикали и по горизонтали, а ваш Div – еще нет (:

Как выровнять блок по центру по горизонтали все знают и ни для кого не составит сложности это реализовать. Но когда дело касается того, как же выровнять блок по центру по вертикали – тут уже люди извращаются как могут.  Конечно с появлением flex выровнять div по вертикали больше не составляет труда, но flex еще не так хорошо поддерживается, как нам хотелось бы – поэтому часто возникает необходимость применять танцы с бубном.

Как же выровнять div с динамической высотой по вертикали

В данном примере я разберу, как выравнять div с динамической высотой по вертикали и по горизонтали. Мало этого – мы еще добавим контейнеры шапки и футера, при этом footer будет прилеплен к нижней части экрана, вне зависимости от высоты. Весь пример является полностью адаптивным и будет корректно отображаться на любых девайсах.

Итак, давайте разберем код по порядку. Существует несколько способов, как выровнять блок по вертикали. Лично мне нравится способ с имитированием таблицы. Так как в нашем случае мы хотим выровнять блок по центру, нужно предварительно растянуть body и html до 100 процентов в высоту. По умолчанию height у них auto.

body, html {
height: 100%;
}

Далее у нас общий врапер, в который все завернуто (по сути можно и без него)

.login-page-wraper {
height: 100%;
}

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

.login-page-wraper .table-emulate {
display: table;
width: 100%;
height: 100%;
position: relative;
}

.login-page-wraper .table-cell-emulate {
display: table-cell;
width: 100%;
height: 100%;
vertical-align: middle;
}

Все, теперь блоки, которые будут находится внутри .table-cell-emulate, будут выравниваться по центру по вертикали.

Для выравнивания по горизонтали мы применяем стандартный прием с margin: 0 auto; только в нашем случае думаем заранее о том, что высоту окна браузера могут сжать или просмотреть на каком-то старом устройстве, поэтому добавляем отступы сверху и снизу по 70 пикселей, чтобы шапка и футер не прилипали, если высота окна браузера будет маленькой.

.login-page-wraper .login-form {
width: 400px;
margin: 70px auto;
}

Ну и конечно не забываем “прилепить” шапку и футер

.login-page-wraper header,
.login-page-wraper footer {
background: #eee;
padding: 8px 0;
position: absolute;
}

.login-page-wraper header {
top: 0;
left: 0;
width: 100%;
}

.login-page-wraper footer {
bottom: 0;
left: 0;
width: 100%;
}

Для этого делаем их абсолютно позиционируемыми и footer лепим вниз bottom: 0; А header наверх top: 0;

Конечно в наше время не стоит забывать и о адаптивности верстки, поэтому добавляем один медиазапрос:

@media only screen and (max-width : 450px) {
.login-page-wraper .login-form {
width: 100%;
padding: 0 15px;
}
}

Этот медиазапрос изменит ширину формы со статической на динамическую, в тот момент, когда ширина окна браузера станет меньше 450 пикселей, тем самым форма начнет растягиваться по ширине и верстка макета будет полностью адаптивной.

Посмотреть пример

Leave a Comment

Your email address will not be published.