edubun
Português

Flexbox

Antes do flexbox, centralizar uma caixa na vertical exigia truques. Com display: flex, bastam duas declarações: justify-content e align-items.

Uma linha ou uma coluna

O flexbox, o módulo CSS Flexible Box Layout, organiza um grupo de caixas ao longo de uma linha. Ponha display: flex num contêiner e os filhos diretos dele, os itens flex, se alinham lado a lado em vez de se empilharem. Essa única declaração basta para uma barra de menu, uma fileira de botões ou um cartão cujo rodapé deve ficar grudado embaixo. O flexbox trabalha numa dimensão por vez: ou uma linha, ou uma coluna. Quando você precisa de linhas e colunas juntas, o grid, da próxima unidade, costuma ser a ferramenta melhor.

Numa linha, o eixo principal vai da esquerda para a direita (em português) e o eixo transversal de cima para baixo. justify-content atua ao longo do eixo principal, align-items ao longo do eixo transversal.

Dois eixos

Tudo no flexbox é descrito em termos de dois eixos. O eixo principal é a direção em que os itens correm, definida por flex-direction: row (o padrão) ou column. O eixo transversal fica em ângulo reto com ele. justify-content distribui os itens ao longo do eixo principal: flex-start, center, flex-end, space-between (primeiro e último item nas bordas, espaços iguais entre eles) ou space-around. align-items os posiciona no eixo transversal: stretch (o padrão, todos os itens com a altura do mais alto), flex-start, center ou flex-end. Então uma caixa fica centralizada nas duas direções com justify-content: center e align-items: center.

.bar {
  display: flex;
  justify-content: space-between;  /* logo left, menu right */
  align-items: center;             /* vertically centred */
  gap: 16px;                       /* space between items */
}
.cards { display: flex; flex-wrap: wrap; gap: 12px; }
.card  { flex: 1 1 200px; }        /* grow, shrink, start at 200px */
Uma barra de cabeçalho e uma fileira de cartões que quebra em linhas novas.

Espaços e quebra de linha

gap põe espaço entre os itens sem acrescentar nada nas bordas externas, que é o que você quase sempre quer e o que as margens complicam. Por padrão, os itens flex ficam numa só linha e encolhem para caber, mesmo que fiquem espremidos. flex-wrap: wrap deixa os itens passarem para uma linha nova quando não há espaço, então uma fileira de quatro cartões no notebook pode virar duas fileiras de dois no tablet e uma coluna só no celular, sem nenhuma media query.

Como os itens crescem e encolhem

O atalho flex num item recebe três valores. flex-grow diz quanto do espaço que sobra o item pega em comparação com os irmãos; flex-shrink diz com que facilidade ele encolhe quando falta espaço; flex-basis é o tamanho inicial antes de crescer ou encolher. flex: 1 1 200px quer dizer começar com 200 pixels e depois dividir o espaço extra igualmente com os outros itens que também têm grow 1. flex: 1 sozinho é a forma curta de 1 1 0%, que deixa todos os itens com a mesma largura. Dê a um item flex-grow: 2 e aos outros 1, e ele pega o dobro da parte deles no espaço que sobra.

Ordem visual e ordem real

O flexbox pode mudar a ordem em que os itens aparecem, com flex-direction: row-reverse ou com a propriedade order, sem mexer no HTML. Use isso com cuidado. O foco do teclado e os leitores de tela continuam seguindo a ordem do HTML, então se a tela mostra Contact antes de Home mas o Tab visita Home primeiro, quem usa teclado se perde. Quando a ordem importa para o sentido, mude-a no HTML.

contêiner flexO pai com display: flex
item flexUm filho direto de um contêiner flex
eixo principalDireção em que os itens correm; definida por flex-direction
justify-contentDistribui os itens ao longo do eixo principal
align-itemsPosiciona os itens no eixo transversal
gapEspaço entre os itens, não nas bordas
flex: 1 1 200pxgrow 1, shrink 1, basis 200px
  1. Qual declaração transforma um elemento num contêiner flex?
    • display: flex
    • flex: 1
    • position: flex
  2. Numa linha, qual propriedade espalha os itens na horizontal?
    • justify-content
    • align-items
    • flex-wrap
  3. Com flex-direction: column, o que justify-content controla?
    • A distribuição vertical
    • A distribuição horizontal
    • O tamanho da fonte
  4. Qual valor põe o primeiro e o último itens nas bordas, com espaços iguais entre eles?
    • space-between
    • space-around
    • center
  5. Qual é o valor padrão de align-items?
    • stretch
    • center
    • flex-start
  6. Quatro itens têm flex: 1 num contêiner de 400px sem gaps. Qual é a largura de cada um?
  7. Três itens com flex-basis 0 dividem 400px. Um tem flex-grow 2, os outros 1. Qual é a largura do maior?
  8. O que flex-wrap: wrap permite?
    • Os itens passam para uma linha nova quando não há espaço
    • O texto quebra dentro dos itens
    • Os itens se sobrepõem
  9. A propriedade order põe Contact em primeiro na tela, mas ele é o último no HTML. O que continua visitando-o por último?
    • O foco do teclado e os leitores de tela
    • O ponteiro do mouse
    • Nada
  10. O flexbox monta o layout em quantas dimensões por vez?
Pontos-chave
  • display: flex alinha os filhos diretos ao longo do eixo principal.
  • justify-content no eixo principal, align-items no eixo transversal, gap entre os itens.
  • flex: grow shrink basis; flex-wrap: wrap para fileiras que se reorganizam; mantenha a ordem visual igual à do HTML.
Fontes deste curso (6)
  • W3C CSS Working Group specifications: CSS Snapshot 2025, Selectors Level 4, CSS Cascading and Inheritance Level 5, CSS Color Level 4, CSS Values and Units Level 4, CSS Box Model Level 3, CSS Box Sizing Level 3, CSS Fonts Level 4, CSS Flexible Box Layout Level 1, CSS Grid Layout Level 2, Media Queries Level 4 and Level 5 (w3.org/TR/, checked 2026-10-17)
  • MDN Web Docs, Learn web development: CSS styling basics and CSS layout, and the CSS reference (developer.mozilla.org/en-US/docs/Learn_web_development/Core/Styling_basics, .../Core/CSS_layout, developer.mozilla.org/en-US/docs/Web/CSS, checked 2026-10-17)
  • W3C, CSS history and CSS1 Recommendation of 17 December 1996 (w3.org/Style/CSS20/history.html, w3.org/press-releases/1996/css1-rec, checked 2026-10-17)
  • W3C WCAG 2.2, success criteria 1.4.3 Contrast (Minimum)
  • 1.4.8 Visual Presentation, 1.4.10 Reflow, 1.4.12 Text Spacing (w3.org/TR/WCAG22/, checked 2026-10-17)
  • every code exercise checked with a Playwright probe against a reference solution.

Data de verificação: 2026-10-17