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.
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 */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 flex | O pai com display: flex |
| item flex | Um filho direto de um contêiner flex |
| eixo principal | Direção em que os itens correm; definida por flex-direction |
| justify-content | Distribui os itens ao longo do eixo principal |
| align-items | Posiciona os itens no eixo transversal |
| gap | Espaço entre os itens, não nas bordas |
| flex: 1 1 200px | grow 1, shrink 1, basis 200px |
- Qual declaração transforma um elemento num contêiner flex?
- display: flex
- flex: 1
- position: flex
- Numa linha, qual propriedade espalha os itens na horizontal?
- justify-content
- align-items
- flex-wrap
- Com flex-direction: column, o que justify-content controla?
- A distribuição vertical
- A distribuição horizontal
- O tamanho da fonte
- Qual valor põe o primeiro e o último itens nas bordas, com espaços iguais entre eles?
- space-between
- space-around
- center
- Qual é o valor padrão de align-items?
- stretch
- center
- flex-start
- Quatro itens têm flex: 1 num contêiner de 400px sem gaps. Qual é a largura de cada um?
- Três itens com flex-basis 0 dividem 400px. Um tem flex-grow 2, os outros 1. Qual é a largura do maior?
- 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
- 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
- O flexbox monta o layout em quantas dimensões por vez?
- 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