Noções de grid
grid-template-columns: repeat(3, 1fr) cria três colunas iguais numa linha só, e o navegador põe cada filho na próxima célula livre.
Linhas e colunas ao mesmo tempo
O grid, o módulo CSS Grid Layout, foi feito para layout em duas dimensões: linhas e colunas juntas. Você desenha a grade no contêiner e os itens caem nas células dela. Enquanto o flexbox parte dos itens e deixa que eles resolvam os tamanhos, o grid parte do layout e encaixa os itens nele. Isso faz dele a ferramenta natural para galerias de fotos, listas de cartões e a forma geral de uma página com cabeçalho, barra lateral, conteúdo principal e rodapé.
.gallery {
display: grid;
grid-template-columns: repeat(3, 1fr); /* three equal columns */
gap: 10px;
}
.gallery .wide { grid-column: span 2; } /* this item covers two columns */Trilhas e a unidade fr
grid-template-columns lista a largura de cada coluna, chamada de trilha (track). Você pode usar qualquer comprimento, como 200px 1fr, mas o grid acrescenta uma unidade própria: fr, uma fração do espaço livre. 1fr 1fr 1fr cria três colunas iguais; 2fr 1fr deixa a primeira coluna com o dobro da largura da segunda. A unidade fr reparte só o espaço que sobra depois das trilhas fixas e dos gaps, então 200px 1fr dá uma barra lateral de 200 pixels e deixa a coluna principal ficar com o resto. repeat(3, 1fr) é um jeito mais curto de escrever 1fr 1fr 1fr. grid-template-rows faz o mesmo para as linhas, mas muitas vezes você deixa as linhas em paz e elas ficam da altura do conteúdo.
Posicionando itens
Por padrão, os itens preenchem a grade na ordem do código, uma célula cada, da esquerda para a direita e depois na linha seguinte. Para aumentar um item, grid-column: span 2 faz ele cobrir duas colunas, e grid-row: span 2 duas linhas. As linhas entre as trilhas são numeradas a partir de 1, então uma grade de três colunas tem as linhas de 1 a 4, e grid-column: 1 / 3 quer dizer da linha 1 à linha 3. grid-column: 1 / -1 estica um item pela largura toda, porque números negativos contam a partir do fim.
Dando nome às áreas
Para o layout de uma página, grid-template-areas deixa você desenhar o layout com palavras. Cada string entre aspas é uma linha e cada palavra é uma célula; repetir uma palavra faz uma área se estender por essas células. Depois cada item recebe grid-area com o nome correspondente. O layout abaixo parece quase um rascunho: o cabeçalho em cima, uma barra lateral e o conteúdo principal lado a lado, e o rodapé embaixo. Mudar o layout para o celular é só reescrever essas poucas strings, muitas vezes dentro de uma media query.
.page {
display: grid;
grid-template-columns: 200px 1fr;
grid-template-areas:
"head head"
"side main"
"foot foot";
gap: 16px;
}
header { grid-area: head; }
aside { grid-area: side; }
main { grid-area: main; }
footer { grid-area: foot; }Colunas que se ajustam à tela
Vale decorar um padrão dos guias de grid do MDN: grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)). minmax(150px, 1fr) diz que cada coluna precisa ter pelo menos 150 pixels e pode crescer para dividir o espaço, e auto-fill cria tantas colunas quanto couberem. O resultado é uma galeria que mostra duas colunas no celular e cinco ou seis numa tela larga, de novo sem media query. Como no flexbox, o grid pode pôr os itens numa ordem diferente da do HTML, e vale o mesmo cuidado: mantenha a ordem de leitura e a ordem visual iguais.
| contêiner grid | O pai com display: grid |
| trilha | Uma linha ou uma coluna da grade |
| fr | Uma fração do espaço livre |
| repeat(3, 1fr) | O mesmo que 1fr 1fr 1fr |
| linha da grade | Numeradas a partir de 1; 3 colunas têm as linhas de 1 a 4 |
| span 2 | O item cobre duas trilhas |
| grid-template-areas | Desenha o layout com nomes, uma string por linha |
| minmax() | Um tamanho de trilha entre um mínimo e um máximo |
- O grid foi pensado para layout em quantas dimensões?
- Uma grade de 600px tem colunas 1fr 2fr e nenhum gap. Qual é a largura da segunda coluna?
- Uma grade de 700px tem colunas 200px 1fr e gap de 20px. Qual é a largura da coluna 1fr?
- Quantas linhas de coluna (linhas verticais da grade) tem uma grade de 4 colunas?
- O que
grid-column: 1 / -1faz?- Estica o item por todas as colunas
- Esconde o item
- Põe o item só na última coluna
repeat(4, 1fr)é a forma curta de quê?- 1fr 1fr 1fr 1fr
- 4fr
- 1fr 4fr
- Em grid-template-areas, o que uma string entre aspas representa?
- Uma linha
- Uma coluna
- Um item
- Qual propriedade associa um item a uma área com nome?
- O que minmax(150px, 1fr) significa para uma coluna?
- Pelo menos 150px, crescendo para dividir o espaço livre
- Exatamente 150px
- No máximo 150px
- O que serve para um layout de página em duas dimensões, com cabeçalho, barra lateral e rodapé?
- grid
- flexbox
- float
- display: grid mais grid-template-columns desenha as trilhas; fr divide o espaço livre.
- Os itens preenchem as células em ordem; span e números de linha os posicionam.
- grid-template-areas desenha um layout de página com nomes; repeat(auto-fill, minmax()) ajusta as colunas à tela.
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