Pular para o conteúdo
Cursos

DevClub

LógicaFront-endBack-endMobile

IA Club

IA na prática
Estudar programaçãoEstudar IA

Aula 5 de 6

Quebre linhas com flex-wrap e separe itens com gap

Permita que itens migrem para novas linhas, controle espaços com gap e entenda por que cada linha flexível distribui seu espaço separadamente.

30 minutos · leitura + prática · nível iniciante

Ao terminar esta aula, você vai conseguir

  • Ativar múltiplas linhas com flex-wrap
  • Criar espaçamento consistente com gap
  • Diferenciar align-items de align-content
Três itens alinhados no eixo principal e observados pelo eixo cruzado.

Uma fileira funciona até o conteúdo encontrar uma tela estreita. Se os itens não puderem encolher o suficiente, eles transbordam. Nesta aula, você permitirá que o grupo forme novas linhas e manterá intervalos consistentes sem calcular qual item está na borda.

flex-wrap controla se o container aceita uma ou várias linhas flexíveis. Pense numa fila de atendimento. Quando a primeira faixa fica cheia, uma segunda fila é aberta; cada fila organiza as próprias pessoas. O container representa a área de espera, os itens são as pessoas e cada faixa é uma linha flexível. O limite é importante: Flexbox não cria colunas alinhadas entre as linhas como uma planilha. Cada linha distribui seu espaço independentemente.

Autorize a mudança de linha

O valor inicial é nowrap. Mesmo que falte espaço, o navegador tenta manter tudo numa linha, reduzindo itens quando permitido ou deixando overflow:

css
.categorias {
  display: flex;
  flex-wrap: nowrap;
}

Troque para wrap e dê aos itens uma base que revele o comportamento:

css
.categorias {
  display: flex;
  flex-wrap: wrap;
}

.categorias a {
  flex: 1 1 10rem;
}

Cada link começa perto de 10rem, pode crescer para preencher sua linha e pode encolher antes da quebra. Quando o conjunto deixa de caber, o próximo item migra. A última linha pode ter larguras diferentes das anteriores porque calcula a própria sobra. Se você precisa de colunas alinhadas de ponta a ponta em todas as linhas, CSS Grid provavelmente expressa melhor o problema.

Use gap para falar do intervalo

Antes de gap, era comum colocar margem em todos os filhos e remover a margem do último com seletores especiais. Agora o espaço pertence ao container:

css
.categorias {
  display: flex;
  flex-wrap: wrap;
  gap: 0.75rem 1rem;
}

O primeiro valor é o intervalo entre linhas; o segundo, entre colunas. Com um único valor, ambos usam a mesma medida. Diferentemente da margem, gap não cria espaço extra nas bordas externas do grupo. O padding do container continua responsável por essa borda interna.

Alinhe linhas somente quando elas existem

align-items alinha itens dentro de cada linha. align-content distribui o conjunto de linhas no eixo transversal, mas só produz efeito quando há mais de uma linha e sobra espaço transversal:

css
.categorias {
  min-height: 18rem;
  flex-wrap: wrap;
  align-content: center;
}

Se nada mudar, confirme os dois requisitos antes de trocar valores: houve wrap de verdade e existe altura livre? Esse diagnóstico evita o erro comum de usar align-content como substituto de align-items.

Outro tropeço é declarar wrap, mas manter cada item com largura mínima maior que o próprio viewport. A quebra cria novas linhas; não torna conteúdo impossivelmente largo em responsivo. Inspecione basis, min-width e palavras que não quebram.

No laboratório, altere a largura do container e conte quantas linhas aparecem. Depois compare uma solução com margem nos links e outra com gap. A missão termina com seis filtros legíveis em 320 pixels, sem sobreposição e sem seletor “último item”. Registre também quando escolheria Grid: se a exigência for alinhar colunas entre todas as linhas, você encontrou o limite desta ferramenta.

Laboratório ao vivo

Lista de categorias que quebra linha

Reduza o espaço da lista e altere a base dos itens. Compare nowrap e wrap, depois ajuste gap sem adicionar margem aos botões.

Pronto para testar
Resultado

Pare e pense

O que acontece quando flex-wrap está em wrap e os itens não cabem?

Escolha uma resposta
Missão da aula

Faça sem copiar

Faça seis filtros quebrarem em quantas linhas forem necessárias. O sucesso é não haver sobreposição e todo intervalo vir de gap, não de margem nos itens.

Fontes para consultar

Terminou a missão?

Marque apenas quando você conseguir explicar o conceito e concluir o desafio. O progresso fica salvo somente neste navegador.

Próxima: Projeto Flexbox: monte um checkout responsivo →