O que é Flexbox?
O Flexbox (Flexible Box Layout) é um método de layout CSS que permite organizar
elementos de forma flexível e eficiente. Para ativar o Flexbox, aplicamos display: flex
ao
elemento pai (container).
Comparação: Sem Flex vs Com Flex
Sem Flexbox (display: block)
Os elementos ficam empilhados verticalmente (comportamento padrão de divs)
display: block; (padrão)
Com Flexbox (display: flex)
Os elementos se alinham horizontalmente no mesmo eixo
display: flex;
Conceitos Fundamentais
🎯 Flex Container
O elemento pai que recebe display: flex
📦 Flex Items
Os elementos filhos diretos do flex container
➡️ Eixo Principal
Direção horizontal (padrão) onde os itens se alinham
⬇️ Eixo Transversal
Direção perpendicular ao eixo principal (vertical)
Justify Content
Como alinhar itens no eixo principal (horizontal)
O que é Justify Content?
A propriedade justify-content
define como os itens flexíveis são alinhados ao longo do eixo
principal (horizontal por padrão) de um container flex.
Demonstrações
flex-start (padrão)
Alinha os itens no início do container
justify-content: flex-start;
center
Centraliza os itens no container
justify-content: center;
flex-end
Alinha os itens no final do container
justify-content: flex-end;
space-between
Distribui espaço igual entre os itens
justify-content: space-between;
space-around
Distribui espaço igual ao redor dos itens
justify-content: space-around;
space-evenly
Distribui espaço igual entre e ao redor dos itens
justify-content: space-evenly;
Teste Interativo
Clique nos botões para ver o efeito de cada valor:
Flex Direction
Como definir a direção dos itens no container flex
O que é Flex Direction?
A propriedade flex-direction
define a direção do eixo principal do container flex,
controlando como os itens são organizados: horizontalmente, verticalmente, ou em ordem reversa.
Demonstrações
row (padrão)
Organiza os itens horizontalmente, da esquerda para a direita
flex-direction: row;
row-reverse
Organiza os itens horizontalmente, da direita para a esquerda
flex-direction: row-reverse;
column
Organiza os itens verticalmente, de cima para baixo
flex-direction: column;
column-reverse
Organiza os itens verticalmente, de baixo para cima
flex-direction: column-reverse;
Teste Interativo
Clique nos botões para ver o efeito de cada direção:
Flex Wrap
Como os itens se comportam quando não cabem no container
O que é Flex Wrap?
A propriedade flex-wrap
controla se os itens flex devem quebrar para uma nova linha quando
não cabem no container, ou se devem ser comprimidos na mesma linha.
Demonstrações
nowrap (padrão)
Todos os itens ficam na mesma linha, mesmo que seja necessário comprimir
flex-wrap: nowrap;
wrap
Os itens quebram para uma nova linha quando necessário
flex-wrap: wrap;
wrap-reverse
Os itens quebram para uma nova linha, mas na ordem reversa
flex-wrap: wrap-reverse;
Teste Interativo
Clique nos botões para ver como o wrap afeta o layout:
Align Items
Como alinhar itens no eixo transversal (vertical)
O que é Align Items?
A propriedade align-items
controla como os itens flex são alinhados ao longo do eixo
transversal (perpendicular ao eixo principal). Por padrão, alinha verticalmente quando flex-direction é
row.
Demonstrações
stretch (padrão)
Os itens se esticam para preencher toda a altura do container
Com mais
conteúdo
align-items: stretch;
flex-start
Alinha os itens no início do eixo transversal (topo)
Com mais
conteúdo
align-items: flex-start;
center
Centraliza os itens no eixo transversal
Com mais
conteúdo
align-items: center;
flex-end
Alinha os itens no final do eixo transversal (base)
Com mais
conteúdo
align-items: flex-end;
baseline
Alinha os itens pela linha de base do texto
align-items: baseline;
Teste Interativo
Clique nos botões para ver como o alinhamento afeta os itens:
Mais
Alto
Align-self - Alinhamento Individual
A propriedade align-self permite sobrescrever o align-items para um item específico.
O que é Align-self?
A propriedade align-self
funciona como o align-items
, mas aplicada
individualmente a cada item flex. Ela permite que um item tenha um alinhamento diferente do resto do
grupo.
Demonstrações
auto (padrão)
Herda o valor de align-items do container
align-self: auto;
flex-start
Um item alinhado ao início, outros mantêm o padrão
align-self: flex-start;
flex-end
Um item alinhado ao final
align-self: flex-end;
stretch
Um item se estica individualmente
align-self: stretch;
baseline
Alinhamento pela linha de base do texto
align-self: baseline;
Combinação
Cada item com seu próprio alinhamento
Cada item com align-self diferente
Teste Interativo
auto
auto
auto
Align Content
Como alinhar múltiplas linhas de itens (funciona apenas com flex-wrap)
O que é Align Content?
A propriedade align-content
alinha as linhas do container flex quando há múltiplas linhas
(quando flex-wrap: wrap
está ativo). Controla o espaçamento entre as linhas no eixo
transversal.
Demonstrações
stretch (padrão)
As linhas se esticam para preencher todo o espaço disponível
align-content: stretch;
flex-start
Alinha as linhas no início do container
align-content: flex-start;
center
Centraliza as linhas no container
align-content: center;
flex-end
Alinha as linhas no final do container
align-content: flex-end;
space-between
Distribui espaço igual entre as linhas
align-content: space-between;
space-around
Distribui espaço igual ao redor das linhas
align-content: space-around;
Teste Interativo
Clique nos botões para ver como o align-content afeta múltiplas linhas:
Flex Items - Propriedades dos Filhos
Agora vamos aprender as propriedades que aplicamos nos itens individuais
Flex Grow
Como os itens crescem para ocupar espaço disponível
O que é Flex Grow?
A propriedade flex-grow
define quanto um item deve crescer em relação aos outros itens
quando há espaço disponível no container. O valor padrão é 0
(não cresce).
Demonstrações
flex-grow: 0 (padrão)
Os itens mantêm seu tamanho original, sem crescer
flex-grow: 0
flex-grow: 0
flex-grow: 0
flex-grow: 0;
flex-grow: 1
Todos os itens crescem igualmente para ocupar o espaço disponível
flex-grow: 1
flex-grow: 1
flex-grow: 1
flex-grow: 1;
Valores diferentes
Itens crescem proporcionalmente aos seus valores de flex-grow
flex-grow: 1
flex-grow: 2
flex-grow: 3
flex-grow: 1, 2, 3;
Apenas um item cresce
Apenas o item com flex-grow > 0 ocupa o espaço extra
flex-grow: 0
flex-grow: 1
flex-grow: 0
flex-grow: 0, 1, 0;
Teste Interativo
Ajuste os valores de flex-grow para cada item:
flex-grow: 1
flex-grow: 1
flex-grow: 1
Flex Shrink
Como os itens encolhem quando não há espaço suficiente
O que é Flex Shrink?
A propriedade flex-shrink
define quanto um item deve encolher em relação aos outros itens
quando não há espaço suficiente no container. O valor padrão é 1
(encolhe normalmente).
Demonstrações
flex-shrink: 1 (padrão)
Todos os itens encolhem igualmente quando necessário
flex-shrink: 1
flex-shrink: 1
flex-shrink: 1
flex-shrink: 1;
flex-shrink: 0
Os itens não encolhem, mantêm seu tamanho original
flex-shrink: 0
flex-shrink: 0
flex-shrink: 0
flex-shrink: 0;
Valores diferentes
Itens encolhem proporcionalmente aos seus valores de flex-shrink
flex-shrink: 1
flex-shrink: 2
flex-shrink: 3
flex-shrink: 1, 2, 3;
Apenas um não encolhe
Apenas os itens com flex-shrink > 0 encolhem
flex-shrink: 1
flex-shrink: 0
flex-shrink: 1
flex-shrink: 1, 0, 1;
Teste Interativo
Ajuste os valores de flex-shrink para cada item (container pequeno para forçar encolhimento):
flex-shrink: 1
flex-shrink: 1
flex-shrink: 1
Flex Basis
Define o tamanho inicial dos itens antes da distribuição do espaço
O que é Flex Basis?
A propriedade flex-basis
define o tamanho inicial de um item antes do espaço restante ser
distribuído. É como definir uma largura base, mas específica para flexbox. O valor padrão é
auto
.
Demonstrações
flex-basis: auto (padrão)
O tamanho é baseado no conteúdo do item
flex-basis: auto
flex-basis: auto
flex-basis: auto
flex-basis: auto;
flex-basis: 0
Ignora o conteúdo, todos começam do tamanho zero
flex-basis: 0
flex-basis: 0
flex-basis: 0
flex-basis: 0;
flex-basis: valores fixos
Define tamanhos específicos em pixels
flex-basis: 100px
flex-basis: 150px
flex-basis: 200px
flex-basis: 100px, 150px, 200px;
flex-basis: porcentagens
Define tamanhos como porcentagem do container
flex-basis: 20%
flex-basis: 30%
flex-basis: 50%
flex-basis: 20%, 30%, 50%;
Teste Interativo
Ajuste os valores de flex-basis para cada item:
flex-basis: auto
flex-basis: auto
flex-basis: auto
Flex Shorthand
Combina flex-grow, flex-shrink e flex-basis em uma única propriedade
O que é Flex Shorthand?
A propriedade flex
é um shorthand que combina flex-grow
,
flex-shrink
e flex-basis
em uma única declaração. Sintaxe:
flex: grow shrink basis
. É a forma mais comum de trabalhar com flexbox.
Demonstrações
flex: initial (padrão)
Equivale a flex: 0 1 auto - não cresce, encolhe, tamanho baseado no conteúdo
flex: initial
flex: initial
flex: initial
flex: initial; /* 0 1 auto */
flex: 1
Equivale a flex: 1 1 0 - todos os itens crescem igualmente
flex: 1
flex: 1
flex: 1
flex: 1; /* 1 1 0 */
flex: auto
Equivale a flex: 1 1 auto - cresce e encolhe, tamanho baseado no conteúdo
flex: auto
flex: auto
flex: auto
flex: auto; /* 1 1 auto */
flex: none
Equivale a flex: 0 0 auto - não cresce nem encolhe, tamanho fixo
flex: none
flex: none
flex: none
flex: none; /* 0 0 auto */
Valores personalizados
Combinações específicas de grow, shrink e basis
flex: 2 1 100px
flex: 1 2 150px
flex: 3 1 50px
flex: 2 1 100px, 1 2 150px, 3 1 50px;
Teste Interativo
Escolha valores predefinidos de flex para cada item:
flex: 1
flex: 1
flex: 1
Order - Ordem Visual (Avançado)
Controla a ordem visual dos itens sem alterar o HTML - propriedade mais avançada
O que é Order?
A propriedade order
permite alterar a ordem visual dos itens flex sem modificar a estrutura
HTML. É uma das propriedades mais avançadas do Flexbox, especialmente útil para layouts responsivos. O
valor padrão é 0
. Itens com valores menores aparecem primeiro.
Demonstrações
order: 0 (padrão)
Todos os itens mantêm a ordem original do HTML
order: 0
order: 0
order: 0
order: 0; (todos)
Reordenação simples
Alterando a ordem com valores positivos
order: 2
order: 1
order: 3
order: 2, 1, 3;
Usando valores negativos
Valores negativos movem itens para o início
order: 0
order: -1
order: 1
order: 0, -1, 1;
Caso prático: Layout responsivo
Reorganizando elementos para mobile (sidebar por último)
order: 1
order: 2
Header: 1, Sidebar: 3, Content: 2
Teste Interativo
Ajuste a ordem de cada item (valores de -3 a 3):
(Primeiro no HTML)
order: 0
(Segundo no HTML)
order: 0
(Terceiro no HTML)
order: 0