Como centralizar elementos
- Posicionar um elemento no centro dentro do elemento pai foi, durante muito tempo, um problema complicado.
- Com a evolução do CSS, surgiram várias soluções, e hoje há uma ampla gama de opções.
- Este tutorial ajuda a entender os trade-offs entre diferentes abordagens e oferece estratégias para lidar com centralização em praticamente qualquer cenário.
Centralização com margens automáticas
- Quando você quer centralizar um elemento horizontalmente, pode usar margens com valor
auto.
- É preciso limitar a largura do elemento, e
fit-content faz com que ele ajuste seu tamanho ao conteúdo.
- A propriedade
margin-inline permite definir margin-left e margin-right como auto ao mesmo tempo.
Centralização com Flexbox
- O Flexbox oferece bastante controle para distribuir grupos de itens ao longo do eixo principal.
- É possível centralizar um único elemento na horizontal e na vertical, e a centralização continua funcionando mesmo quando os elementos filhos não cabem no contêiner.
- A propriedade
flex-direction permite controlar a direção de empilhamento de vários elementos filhos.
Centralização dentro da viewport
- Em alguns casos, é necessário centralizar o elemento dentro da viewport, e não do contêiner pai.
- Com
position: fixed e inset: 0px, é possível fixar o elemento na viewport e usar margin: auto para centralizá-lo horizontal e verticalmente.
Centralização de elementos com tamanho desconhecido
- Quando o tamanho do elemento não é conhecido explicitamente,
fit-content pode ser usado para encolhê-lo de acordo com o conteúdo.
Centralização com CSS Grid
- A forma mais concisa de centralizar um elemento horizontal e verticalmente com CSS Grid é usar a propriedade
place-content: center.
Diferenças em relação ao Flexbox
- O CSS Grid usa um algoritmo de layout diferente, e em alguns casos essa complexidade extra pode se tornar um problema.
- Enquanto o Flexbox calcula porcentagens com base no elemento pai, o CSS Grid faz esse cálculo com base na célula da grade.
Centralização de pilhas de elementos
- Com CSS Grid, é possível atribuir vários elementos à mesma célula, fazendo com que eles se empilhem de trás para frente.
Centralização de texto
- O texto recebe um tratamento especial em CSS, e pode ser centralizado com a propriedade
text-align.
O futuro da centralização
- A propriedade
align-content também está sendo implementada no layout Flow, o que permitirá controlar o alinhamento do conteúdo na direção de bloco.
Além dos padrões
- Ao entender CSS em profundidade, é possível resolver problemas com intuição, em vez de depender apenas da memória.
Como decidir qual método usar
- Se você quer centralizar horizontalmente um único elemento, pode usar a estratégia de margens automáticas do layout Flow.
- Para centralizar uma interface flutuante, como um modal ou banner, é possível usar layout posicionado com margens automáticas.
- Para centralizar uma pilha de elementos, pode-se usar CSS Grid.
- Para centralizar texto,
text-align pode ser usado sozinho ou em conjunto com outras técnicas.
- Na maioria dos outros casos, o Flexbox é a melhor opção. É o método mais versátil para centralizar um ou vários filhos na horizontal e na vertical.
Opinião do GN⁺
- O ponto mais importante deste texto é ajudar na compreensão dos diferentes métodos de centralização em CSS.
- Com a evolução do CSS, tarefas de centralização que antes eram complexas ficaram muito mais simples, o que ajuda bastante os desenvolvedores web.
- Entender e usar tecnologias modernas de CSS, como Flexbox e CSS Grid, tornou-se uma habilidade essencial para design e layout na web.
3 comentários
Pensando bem, de repente me incomodou que até no GeekNews os artigos não estejam centralizados... aff, rs
Tenho usado bastante
place-items: center;, mas há vários outros métodos também.Comentários no Hacker News
Resumo do primeiro comentário:
<table>, mas no CSS isso parece mais difícil.Resumo do segundo comentário:
Resumo do terceiro comentário:
displayepositionsão a base para aprender posicionamento.Resumo do quarto comentário:
Resumo do quinto comentário:
Resumo do sexto comentário:
Resumo do sétimo comentário:
Resumo do oitavo comentário:
Resumo do nono comentário:
position: absolute,left: 50%,transform: translateX(-50%).Resumo do décimo comentário: