Centralizar div ou outro elemento CSS

Desde quando comecei a programar vejo em fóruns, artigos, ou qualquer outro tipo de lugar onde se possa tirar dúvidas, as pessoas perguntando: como centralizar div? Essa pergunta também serve para qualquer outro elemento CSS. E vejo essa dúvida até hoje nos tópicos recentes, talvez isso aconteça devido ao fato de sempre existirem pessoas entrando no mundo da programação e ser um recurso muito utilizado em sites e plataformas Web.

Nesse artigo pretendo explicar e dar exemplos de algumas maneiras de como centralizar um <div>, ou qualquer outro elemento HTML, seja na horizontal, na vertical ou em ambos.

Centralizando na horizontal

Para elementos do tipo inline como <a>, <img>, <span>, <input>, <label>, entre outros, você pode apenas definir seu elemento de container com a propriedade text-align: center, exemplo:

HTML de exemplo:


<div class="container">
	<span>Lorem ipsum</span>
</div>

CSS de exemplo:


.container {
	text-align: center;
}

Para elementos do tipo block como <div>, <h1>, <ul>, <li>, <p>, entre outros, você pode fazer de várias maneiras. A que eu mais vejo por aí é utilizando margin-left e margin-right com o valor auto, exemplo:

HTML de exemplo:


<div class="container">
	Lorem ipsum
</div>

CSS de exemplo:


.container {
	width: 200px;
	margin-left: auto;
	margin-right: auto;
}

Para centralizar um elemento do tipo block você deve definir uma largura para ele, caso contrário, ele irá ocupar 100% do tamanho do seu elemento pai, impossibilitando de centraliza-lo.

Outra forma de centralizar um elemento block, é utilizar a propriedade display com o valor flex, essa propriedade deve ser aplicada no elemento pai do elemento que deseja centralizar, exemplo:

HTML de exemplo:


<div class="element-parent">
	<div class="element-child">Lorem ipsum</div>
</div>

CSS de exemplo:


.element-parent {
	display: flex;
	justify-content: center;
}

A propriedade justify-content irá definir o espaço entre os elementos conforme o eixo definido para o elemento pai, como não definimos, o padrão é o eixo row, que significa linha, aplicando o valor center, os elementos filhos irão se posicionar em direção ao centro do elemento pai, dando o efeito de centralização.

Centralizando na vertical

Centralizar na vertical é um pouco mais complicado, mas assim como na horizontal existem diversas maneiras de conseguir o mesmo efeito, uma delas é atribuir ao elemento pai a propriedade display: table-cell, com isso, o elemento pai vai se comportar como uma célula de uma tabela, bastando definir para o aliamento do conteúdo ser middle (meio), conforme exemplo:

HTML de exemplo:


<div class="element-parent">
	<div class="element-child">Lorem ipsum</div>
</div>

CSS de exemplo:


.element-parent {
	height: 500px;
	display: table-cell;
	vertical-align: middle;
}

Outra forma é utilizando position: absolute, elementos com position absolute se posicionam referente ao primeiro elemento pai não static, se quiserem saber mais sobre position CSS já escrevi um artigo sobre isso, só conferir no link Position CSS. Sabendo disso, você pode posicionar o elemento aonde desejar, para isso, você deve definir coordenadas para o elemento filho, como top, right, bottom, left, depois você deve "puxar" a metade do tamanho do elemento em direção oposta do posicionamento, conforme exemplo:

HTML de exemplo:


<div class="element-parent">
	<div class="element-child">Lorem ipsum</div>
</div>

CSS de exemplo:


.element-parent {
	height: 500px;
	position: relative;
}
.element-child {
	position: absolute;
	top: 50%;
	transform: translate(0, -50%);
}

Centralizando na horizontal e vertical

Agora vem a dúvida da maioria das pessoas que estão iniciando na programação Web, como centralizar div na horizontal e vertical? Basicamente é muito parecido com o posicionamento vertical, mudando somente um pequeno trecho para deixar na horizontal também. Podemos utilizar a mesma técnica de posicionamento com o position absolute, a única diferença é que vamos deslocar o elemento para esquerda ou direita e "puxar" a metade do tamanho dele para o lado oposto, conforme exemplo:

HTML de exemplo:


<div class="element-parent">
	<div class="element-child">Lorem ipsum</div>
</div>

CSS de exemplo:


.element-parent {
	height: 500px;
	position: relative;
}
.element-child {
	position: absolute;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
}

Outra forma é utilizar o display flex definindo o elemento pai com o atributo align-items: center, isso fará com que os elementos filhos se posicionem no centro do eixo vertical, exemplo:

HTML de exemplo:


<div class="container">
	<div>Lorem ipsum</ddiv>
</div>

CSS de exemplo:


.container {
	height: 500px;
	display: flex;
	justify-content: center;
	align-items: center;
}

Conclusão

Essas são algumas técnicas para centralizar div ou outro elemento utilizando CSS, entendendo bem essas técnicas, fica fácil centralizar qualquer elemento em qualquer lugar da página.

Voltar para o topo