Ícone do site Daniel Castro

CSS Flexbox: Guia prático

Guia Prático e Completo CSS Flexbox
6 minutos leitura

Neste guia quero te ajudar a entender na prática o que é o CSS Flexbox, por mais que este conceito não seja algo novo, ainda é uma dúvida recorrente de muitos desenvolvedores e quem está chegando agora no desenvolvimento frontend, é importante dominar.

Antes do Flexbox, para tornar um conteúdo minimamente responsivo, usamos percentuais e outros hacks, mas já há alguns anos, passamos a ter a especificação do CSS Flexbox.

Afinal, o que é CSS Flexbox

A principal ideia do Flexbox é permitir que os elementos de um layout tenham a capacidade de ampliar ou reduzir seu tamanho e se alinhar em um layout sem quebras.

CSS Flexbox é uma forma de organizar elementos em uma página quando o seu tamanho final é desconhecido ou quando possui um conteúdo dinâmico.

Como a grande maioria das aplicações que criamos possui um layout dinâmico, cujo conteúdo pode ampliar ou encolher algum contêiner a depender do seu conteúdo, usar o CSS Flexbox para organizar layouts acaba sendo uma boa escolha.

Mas antes de ir para a prática, vamos conhecer alguns conceitos do Flexbox.

Conceitos do Flexbox

Quando trabalhamos com Flexbox, o primeiro conceito que precisar entender é que estamos trabalhando com um módulo, e isto quer dizer que, quando definimos que um elemento é flexível, os elementos diretos passam a ser itens flexíveis.

Vamos dar uma analisada nestas imagens:

Container em Roxo
Flex Items em Amaralo

Com este conceito em mente, outro conceito importante é saber que você precisa definir propriedades e valores também aos itens flexíveis, só combinando propriedades e valores aos dois elementos é que você conseguirá ajustar seu layout como desejado.

Outro conceito importante para pegar é que os elementos são dispostos na direção definida para duas linhas imaginárias, o que é conhecido por eixos: O eixo principal (main axis) e eixo transversal (cross axis).

A direção dos elementos pode seguir no horizontal ou vertical, o que vai depender é o valor da propriedade flex-direction definida para contêiner.

Este é um conceito que pode ser confuso de entender, mas tente se prender a ideia de que os elementos são dispostos seguindo sempre estas linhas, por padrão, da esquerda para a direita, de cima para baixo. Talvez esta imagem te ajude.

Agora que temos uma base sobre o que é o CSS Flexbox e os principais fundamentos, vamos conhecer as propriedades do Container Flebox e dos Flex Items, com elas atribuidas vamos conseguir dar forma ao nosso layout.

Como definir um Flex Container

Para definir que um contêiner deve ser flexível, adicione a propriedade display: flex.

Propriedades do Container Flexbox

A primeira coisa que precisamos fazer é definir um contêiner como um item flexível, para isto basta adicionar a propriedade display: flex.

<div styles="display: flex">
  Container
</div>

Vamos conhecer as propriedades possíveis.

flex-direction

Ajuda a definir a direção dos flex-itens dentro do contêiner.

Por padrão, o valor desta propriedade é row, o que faz alinhar em linha os elementos, mas temos outros valores possíveis nesta propriedade:

.container {
  flex-direction: column;
}

flex-wrap

Ajuda a definir se um container deve quebrar os itens flexíveis em uma nova linha.

Por padrão, todos os elementos vão ocupar uma única linha, utilizando a largura disponível do contêiner, em alguns casos, pode ser necessário quebrar os elementos em uma nova linha para distribuir melhor os elementos e para isso, temos alguns valores:

.container {
  flex-wrap: wrap;
}

flex-flow

Ajuda a definir os valores de flex-direction e flex-wrap em uma única propriedade.

Esta propriedade é só um atalho, você pode definir as propriedades separadas, mas caso ache útil, pode combinar os valores, primeiro o valor de flex-direction, depois flex-wrap.

.container {
  flex-flow: row-reverse wrap;
}

justify-content

Ajuda a definir o alinhamento dos itens flex dentro do container em relação flex-direction.

Está propriedade é útil para distribuir itens quando temos espaço sobrando, ou precisamos definir que os itens fiquem alinhados no inicio e no fim do container, no centro ou que tenham um espaço entre eles.

Os principais valores desta propriedade são:

.container {
  justify-content: space-between;
}

align-items

Ajuda a definir o alinhamento dos itens em relação ao eixo cruzado do container.

Está propriedade é muito utilizada para alinhar verticalmente um item flex. =)

Os principais valores desta propriedade são:

.container {
  align-items: center;
}

align-content

Ajuda a definir o alinhamento das linhas de um container.

Ao aplicar está propriedade, o container precisa ter um tamanho maior que a altura das linhas para que o efeito seja percebido.

.container {
  align-content: center;
}

gap, row-gap e column-gap

Ajuda a definir e controlar o tamanho exato de espaçamento entre os itens Flex.

Um aviso relevante, estas propriedades também funcionam em layouts com CSS Grid.

Vamos aos valores desta propriedade:

.container {
  display: flex;
  gap: 15px;
  gap: 15px 30px; /* row-gap e column-gap */
}

Propriedades do Flex Item

Os Flex Items são elementos os filhos de um elemento Flex.

Como vimos na imagem anterior, quando você defini por exemplo que uma DIV tem display flex, os elementos dentro dela passam a ser os items flexíveis (Flex Items).

Um Flex Item também pode ser definido como um elemento Flex, desta forma os seus elementos diretos também passam a ser Flex Items.

order

Ajuda a definir a ordem que os elementos aparecem na tela, sempre do menor para o maior.

Por padrão, a ordem dos elementos é a ordem que os elementos foram criados no HTML.

.item {
  order: 2;
}

flex-grow

Ajuda a definir se um Flex Item pode expandir se necessário.

Por padrão um Flex Item tem o valor 0 definido nesta propriedade, mas você pode atribuir um valor numérico para representar uma proporção.

Por exemplo, um item que tem flex-grow igual a 2 e outro flex-grow 1, vai expandir e ocupar o dobro de espaço do outro item, está regra também pode ser usada para mais itens.

.item {
  flex-grow: 2;
}

flex-shrink

Ajuda a definir se um item flexbox deve encolher dentro de um container se necessário.

Por padrão, o valor desta propriedade é 0.

.item {
  flex-shrink: 3;
}

flex-basis

Ajuda a definir o tamanho inicial de um Flex Item antes do espaço sobrando for distribuído.

Por padrão, esta propriedade tem o valor auto, isto indica que o elemento vai ocupar o espaço necessário para seu conteúdo, mas você pode definir um tamanho fixo.

.item {
  flex-basis: 100px;
}

align-self

Ajuda a definir o alinhamento especifico de um único item dentro do container.

Por padrão, está propriedade tem o valor auto, os valores possíveis são iguais ao align-items.

.item {
  align-self: center;
}

flex

Ajuda a definir os valores de flex-grow, flex-shrink e flex-basis em uma única propriedade.

Por padrão, o valor desta propriedade é none, mas você pode definir da seguinte forma:

.item1 {
  flex: 2 3 100px; /* flex-grow: 2, flex-shrink: 3 e flex-basis: 100px */
}

.item2 {
  flex: 1; /* flex-grow: 1, flex-shrink: 1 e flex-basis: 0 */
}

Finalizando

Espero que eu tenha conseguido te ajudar a esclarecer este conceito tão importante para o desenvolvimento frontend, se você achar que este conteúdo foi útil ou se achar que faltou algo a mais, por favor deixe um comentário para saber.

Agora que você leu mais sobre o CSS Flebox uma dica extra para fixar o conteúdo é praticar, crie algum projeto com HTML e CSS ou se preferir, acesse o Flexbox Froggy e divirta-se praticando nesta ferramenta online.

Se quiser aprender mais de Frontend, também tenho outros artigos sobre JavaScript.

Créditos: Algumas das imagens e informações foram obtidas do Guide to Flexbox.

Don't miss out!
Acesse novos conteúdos 

Entre para minha newsletter e receba os novos conteúdos e novidades semanalmente.

Invalid email address
Você pode sair da lista a qualquer momento. Ao enviar o formulário, você aceito a política de privacidade.
Sua inscrição na newsletter foi recebida com sucesso!
Sair da versão mobile