edubun
Português

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 */
Uma galeria de três colunas com um item largo.

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.

repeat(3, 1fr) com gap de 20px. Os números embaixo são as linhas da grade, de 1 a 4. O item verde ocupa duas colunas, da linha 1 à linha 3.

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; }
Um layout de página inteiro desenhado com nomes de áreas.

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 gridO pai com display: grid
trilhaUma linha ou uma coluna da grade
frUma fração do espaço livre
repeat(3, 1fr)O mesmo que 1fr 1fr 1fr
linha da gradeNumeradas a partir de 1; 3 colunas têm as linhas de 1 a 4
span 2O item cobre duas trilhas
grid-template-areasDesenha o layout com nomes, uma string por linha
minmax()Um tamanho de trilha entre um mínimo e um máximo
  1. O grid foi pensado para layout em quantas dimensões?
  2. Uma grade de 600px tem colunas 1fr 2fr e nenhum gap. Qual é a largura da segunda coluna?
  3. Uma grade de 700px tem colunas 200px 1fr e gap de 20px. Qual é a largura da coluna 1fr?
  4. Quantas linhas de coluna (linhas verticais da grade) tem uma grade de 4 colunas?
  5. O que grid-column: 1 / -1 faz?
    • Estica o item por todas as colunas
    • Esconde o item
    • Põe o item só na última coluna
  6. repeat(4, 1fr) é a forma curta de quê?
    • 1fr 1fr 1fr 1fr
    • 4fr
    • 1fr 4fr
  7. Em grid-template-areas, o que uma string entre aspas representa?
    • Uma linha
    • Uma coluna
    • Um item
  8. Qual propriedade associa um item a uma área com nome?
  9. 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
  10. O que serve para um layout de página em duas dimensões, com cabeçalho, barra lateral e rodapé?
    • grid
    • flexbox
    • float
Pontos-chave
  • 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