Выравнивание по центру в CSS

05.02.2019 at 08:59

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

Отрицательный отступ

Применяем к блоку свойства top и left, которые выставляются на 50%. Для этого способа необходимо заранее знать размеры блока, половина от которого является значением отрицательного отступа.
Предположим, у нас есть HTML.

<div class="parent">
    <div class="block">
        <img src="test.jpg" alt=""/>
    </div>
</div>

CSS в таком случае будет следующим.

.parent {
    width: 100%;
    height: 100%;
    position: absolute;
    top: 0;
    left: 0;
    overflow: auto;
}

.block {
    width: 250px; /* Задаем ширину */
    height: 250px; /* Задаем высоту */
    position: absolute;
    top: 50%; /* Отступ сверху на половину родительского блока */
    left: 50%; /* Отступ слева на половину родительского блока */
    margin: -125px 0 0 -125px; /* Отступ на половину блока с помощью отрицательного margin */
    
    img {
        max-width: 100%;
        height: auto;
        display: block;
        margin: 0 auto;
        border: none;
    }
}

Автоматический отступ

Этот способ напоминает предыдущий. Но здесь необходимо выставить атрибуты top, right, bottom и left на 0, а величину отступа выставить на auto. Огромное преимущество метода – наличие рабочих скроллбаров родительского элемента. Но недостаток способа такой же, как и у предыдущего – необходимость жестко задавать размеры блока.
Код выглядит следующим образом.

<style>
.parent {
    width: 100%;
    height: 100%;
    position: absolute;
    top: 0;
    left: 0;
    overflow: auto;
}

.block {
    width: 250px;
    height: 250px;
    position: absolute;

/* Выставляем параметры top, right, bottom, left на 0, а margin – на auto */
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    margin: auto;
    
    img {
        max-width: 100%;
        height: auto;
        display: block;
        margin: 0 auto;
        border: none;
    }
}
</style>

<div class="parent">
    <div class="block">
        <img src="test.jpg" alt=""/>
    </div>
</div>

Таблица

В этом коде необходимо выделить несколько элементов: родителя, ячейку родителя и блок. Первому необходимо задать табличное отображение, второй – ячейку таблицы, а блоку присвоить модель строчного блока.
Ячейке (элементу с классом inner) присваиваем параметры text-align: center и vertical-align: middle. Недостаток способа – не работают скроллбары, да и вообще эмуляция таблицы для выравнивания считается нехорошим тоном в кругу веб-разработчиков.
Пример кода с применением этого метода.

<style>
.parent {
    width: 100%;
    height: 100%;
    position: absolute;
    top: 0;
    left: 0;
    overflow: auto;
}

.block {
    width: 250px;
    height: 250px;
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    margin: auto;
    
    img {
        max-width: 100%;
        height: auto;
        display: block;
        margin: 0 auto;
        border: none;
    }
}
</style>

<div class="parent">
    <div class="inner">
        <div class="block">
            <img src="1450829233933958453855" alt=""/>
        </div>
    </div>
</div>

Как выровнять текст по центру?

Чтобы выровнять текст по центру, необходимо присвоить ему свойство text-align со значением center.
Пример кода.

<style>
    p {
        text-align: center; /* Выравниваем текст по центру */
    }
</style>

<p> Пример текста для демонстрации выравнивания по центру. </p>

Универсальный способ выравнивания по центру

Предположим, нам надо выровнять кнопку по центру в CSS. Для этого необходимо создать див, в центре которого размещается кнопка, которую мы собираемся ставить посередине, а потом воспользоваться типом отображения flex. Код будет приблизительно таким (описание в самом коде).

<style>
.but {
    display: flex; /* Выставляем отображение родительского дива, как flex */
    align-items: center; /* Выравнивание по вертикали */
    justify-content: center; /* Выравнивание по горизонтали */
    height: 100%; /* Высота родительского дива. Необходимо, чтобы кнопка выровнялась посередине от его высоты. Если убрать, кнопка будет размещаться вверху, а не по центру (по оси Y) */
}

.but button {
    width: 400px;
    padding: 15px;
}
</style>

<div class="but">
    <button> Кнопка </button>
</div>

Таким способом можно выравнивать абсолютно любые элементы на веб-странице: формы, текст, картинки, меню, заголовки вертикально и горизонтально. Логика универсальна: создается родительский див, в который необходимый элемент загружается в качестве дочернего. В родительском диве прописываются свойства display: flex, align-items: center, justify-content: center, height: 100%. В дочернем прописывается ширина, отступ и другие свойства.
Единственный недостаток способа – он поддерживается только самыми новыми версиями браузеров. Часть свойств можно реализовать через вендорные префиксы (например, -webkit–) для увеличения совместимости со старыми версиями.

Tags: