Centralização horizontal e vertical de caixas em CSS: 5 categorias e 8 métodos

Estrutura HTML Base

Considere o seguinte código HTML para representar diferentes tipos de elementos:

<div class="container" style="margin: 10px;">
    <div class="inner">Bloco centralizado</div>
</div>
<div class="container" style="margin: 10px;">
    <span class="inner">Elemento inline centralizado</span>
</div>
<div class="container" style="margin: 10px;">
    <span class="inner" style="display: inline-block;">Elemento inline-block centralizado</span>
</div>

Métodos de Centralização

Categoria 1: Flexbox

A abordagem flexível utiliza as propriedades de alinhamento do Flexbox. Aplique ao elemento pai:

display: flex;
align-items: center;
justify-content: center;

Exemplo completo:

<style>
    .container {
        width: 500px;
        height: 500px;
        background-color: #bfa;
        display: flex;
        align-items: center;
        justify-content: center;
    }
    .inner {
        background-color: red;
        width: 150px;
        height: 150px;
    }
</style>

Categoria 2: Posicionamento com Position

Utilize posicionamento absoluto e relativo. Existem variações:

Variação 1: Com transformação

<style>
    .container {
        width: 500px;
        height: 500px;
        background-color: #bfa;
        position: relative;
    }
    .inner {
        background-color: red;
        position: absolute;
        left: 50%;
        top: 50%;
        transform: translate(-50%, -50%);
    }
</style>

Variação 2: Com margem negativa

<style>
    .container {
        width: 500px;
        height: 500px;
        background-color: #bfa;
        position: relative;
    }
    .inner {
        background-color: red;
        position: absolute;
        width: 150px;
        height: 150px;
        left: 50%;
        top: 50%;
        margin-left: -75px;
        margin-top: -75px;
    }
</style>

Variação 3: Com margin auto

<style>
    .container {
        width: 500px;
        height: 500px;
        background-color: #bfa;
        position: relative;
    }
    .inner {
        background-color: red;
        position: absolute;
        width: 150px;
        height: 150px;
        left: 0;
        right: 0;
        top: 0;
        bottom: 0;
        margin: auto;
    }
</style>

Categoira 3: Grid

O Grid Layout simplifica a centralização com place-items. No elemento pai:

display: grid;
place-items: center;

Exemplo:

<style>
    .container {
        width: 500px;
        height: 500px;
        background-color: #bfa;
        display: grid;
        place-items: center;
    }
    .inner {
        background-color: red;
    }
</style>

Categoria 4: Table-Cell

Simule uma tabela usendo display: table-cell. Para elementos enline/inline-block, use text-align center no pai. Para blocos, use margin auto no filho.

<style>
    .container {
        width: 500px;
        height: 500px;
        background-color: #bfa;
        display: table-cell;
        vertical-align: middle;
        text-align: center;
    }
    .inner {
        background-color: red;
        width: 150px;
        height: 150px;
        margin: 0 auto;
    }
</style>

Categoria 5: Para Elementos Inline (não incluindo inline-block)

Utilize text-align center no pai e defina line-height igual à altura do pai no elemento filho.

<style>
    .container {
        width: 500px;
        height: 500px;
        background-color: #bfa;
        text-align: center;
    }
    .inner {
        background-color: red;
        width: 150px;
        height: 150px;
        line-height: 500px;
    }
</style>

Tags: CSS Flexbox CSS Grid CSS Positioning CSS Table-Cell Inline Elements

Publicado em 6-10 04:00 por Thomas