Publicado em

- 4 minutos de leitura

Guia Prático para Dominar Flexbox

img of Guia Prático para Dominar Flexbox

O CSS Flexible Box Layout, mais conhecido como Flexbox, é um modelo de layout unidimensional que revolucionou a forma como criamos alinhamentos e distribuímos espaço entre itens em um container. Antes dele, tarefas simples como centralizar um elemento verticalmente exigiam truques e gambiarras. O Flexbox foi projetado para oferecer uma maneira mais eficiente e previsível de organizar, alinhar e distribuir elementos, mesmo quando o tamanho deles é desconhecido ou dinâmico.

Este modelo de layout é essencial para qualquer desenvolvedor front-end moderno, pois ele simplifica a criação de interfaces responsivas e complexas. Com um conjunto de propriedades aplicadas a um container (o “flex container”) e aos seus filhos diretos (os “flex items”), você ganha controle total sobre o alinhamento, a ordem e o dimensionamento dos elementos em uma única dimensão, seja em linha (horizontal) ou em coluna (vertical).

Como Declarar um Container Flexbox

Para começar a usar o Flexbox, você precisa primeiro definir um container. Isso é feito de maneira muito simples, aplicando a propriedade display no elemento pai.

Você pode usar o valor flex para criar um container em nível de bloco ou inline-flex para um container em nível de linha.

   .flex-container {
	display: flex;
}
   <div class="flex-container">
	<div>Item 1</div>
	<div>Item 2</div>
	<div>Item 3</div>
</div>

A partir do momento em que display: flex é declarado, todos os filhos diretos do .flex-container se tornam “flex items” e começam a se comportar de acordo com as regras do Flexbox.

Centralizando Itens no Container

Uma das tarefas mais comuns e que o Flexbox resolve com maestria é a centralização de itens. O comportamento das propriedades de alinhamento, justify-content e align-items, muda dependendo da direção do eixo principal (flex-direction).

Com flex-direction: row (padrão)

Quando a direção é row, o eixo principal é horizontal e o eixo transversal é vertical.

  • justify-content: alinha os itens ao longo do eixo principal (horizontal). Para centralizar, usamos center.
  • align-items: alinha os itens ao longo do eixo transversal (vertical). Para centralizar, também usamos center.
   .flex-container-row {
	display: flex;
	flex-direction: row; /* Este é o valor padrão */
	justify-content: center; /* Centraliza na horizontal */
	align-items: center; /* Centraliza na vertical */
	height: 200px; /* Altura para vermos o alinhamento vertical */
	background-color: #f0f0f0;
}

Com flex-direction: column

Quando mudamos a direção para column, os eixos são trocados: o eixo principal se torna vertical e o eixo transversal se torna horizontal.

  • justify-content: agora alinha os itens ao longo do novo eixo principal (vertical).
  • align-items: agora alinha os itens ao longo do novo eixo transversal (horizontal).
   .flex-container-column {
	display: flex;
	flex-direction: column;
	justify-content: center; /* Centraliza na vertical */
	align-items: center; /* Centraliza na horizontal */
	height: 200px;
	background-color: #f0f0f0;
}

Entender essa inversão de eixos é o segredo para nunca mais se confundir com o alinhamento no Flexbox.


Imagem com o texto: Curso Angular Moderno e um homem de pele parda usando óculos com a logo do Angular atrás. Logo abaixo existe um botão com o texto "Eu quero!"

Adicionando Espaçamento com gap

Antigamente, para adicionar espaçamento entre os flex items, precisávamos usar margens. Isso podia ser complicado, pois a margem era adicionada a todos os itens, incluindo o último. A propriedade gap veio para resolver isso de forma elegante.

Embora tenha se popularizado com o CSS Grid, a propriedade gap é totalmente compatível com o Flexbox e define o espaçamento (ou “calha”) entre os itens.

   .flex-container-gap {
	display: flex;
	gap: 16px; /* Espaçamento de 16px entre todos os itens */
}

Você também pode especificar valores diferentes para linhas e colunas com row-gap e column-gap, ou usar a forma abreviada gap: <row-gap> <column-gap>.

Guia Rápido de Propriedades Flexbox

Aqui estão algumas das propriedades mais importantes para você usar como um guia rápido.

Para o Container (Pai)

  • display: Define o elemento como um container flex (flex ou inline-flex).
  • flex-direction: Define a direção do eixo principal (row, row-reverse, column, column-reverse).
  • flex-wrap: Permite que os itens quebrem para a próxima linha (nowrap, wrap, wrap-reverse).
  • justify-content: Alinha os itens ao longo do eixo principal.
  • align-items: Alinha os itens ao longo do eixo transversal.
  • align-content: Alinha as linhas do container quando há quebra de linha (com flex-wrap: wrap).

Para os Itens (Filhos)

  • flex-grow: Define a capacidade de um item crescer para ocupar o espaço livre.
  • flex-shrink: Define a capacidade de um item encolher se necessário.
  • flex-basis: Define o tamanho inicial de um item antes da distribuição do espaço livre.
  • order: Altera a ordem visual dos itens.
  • align-self: Sobrescreve o align-items para um item individual.

Conclusão

O Flexbox é uma ferramenta indispensável no arsenal de um desenvolvedor front-end. Ele simplifica a criação de layouts complexos e responsivos, eliminando a necessidade de hacks e código excessivo para tarefas de alinhamento. Ao entender seus conceitos principais, como o container, os itens e a dinâmica dos eixos principal e transversal, você ganha um poder incrível para construir interfaces modernas e flexíveis.

Neste artigo, cobrimos os fundamentos essenciais: como transformar um elemento em um flex container, como centralizar itens de forma eficaz tanto em row quanto em column, e como usar a propriedade gap para um espaçamento limpo. Com essa base e o guia rápido de propriedades, você está pronto para começar a explorar todo o potencial que o Flexbox tem a oferecer e a criar layouts mais robustos e fáceis de manter.

Assine nossa Newsletter

Receba novos posts como esse na sua caixa de e-mail!

Sobre o autor

Author's photo
Henrique Custódia Arquiteto Frontend, entusiasta Angular, cat lover, criador de conteúdo e fundador da Code Dimension!