Grid | CSS
- Grid | CSS
CSS Grid — guia direto ao ponto
Uma folha de consulta curta, prática e pronta para copiar e colar.
1) Quando usar
- Grid = layout bidimensional (linhas + colunas).
- Flex = uma dimensão (ou linha ou coluna).
- Use Grid para páginas, dashboards, cards responsivos, layouts com cabeçalho/rodapé.
2) Começo rápido
.container {
display: grid;
grid-template-columns: repeat(3, 1fr); /* 3 colunas iguais */
gap: 1rem; /* espaçamento entre células */
}
.item:nth-child(1) {
grid-column: span 2; /* ocupa 2 colunas */
}
3) Conceitos essenciais
- Tracks: colunas/linhas definidas em
grid-template-columns/rows. fr: fração do espaço restante no contêiner.- Explícito vs. implícito: tracks declaradas vs. criadas automaticamente.
gap: espaçamento entre células (substituigrid-gap).- Conta “100% de quê?”:
%em Grid é relativo ao contêiner no eixo correspondente.
4) Colunas/linhas na prática
/* Colunas iguais */
.container { grid-template-columns: repeat(4, 1fr); }
/* Larguras mistas */
.container { grid-template-columns: 200px 1fr 2fr; }
/* Evitar estouro de conteúdo com fr */
.container { grid-template-columns: minmax(0, 1fr) 2fr; }
/* Responsivo automático: auto-fit vs auto-fill */
.cards {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr));
gap: 1rem;
}
/* auto-fit: “colapsa” espaços vazios; auto-fill: mantém trilhos fantasma */
Dica:
minmax(0, 1fr)evita que conteúdo com largura mínima (“min-content”) impeça a coluna de encolher.
5) Posicionando itens
.item { grid-column: 2 / 4; /* da coluna 2 até antes da 4 */ }
.item { grid-column: span 2; /* ocupa 2 colunas a partir da atual */ }
.item { grid-row: 1 / span 2; }
/* Linhas nomeadas */
.layout {
display: grid;
grid-template-columns: [sidebar] 18rem [content] 1fr [end];
}
.sidebar { grid-column: sidebar; }
.main { grid-column: content; }
6) Áreas nomeadas (template areas)
.page {
display: grid;
grid-template:
"header header" auto
"aside main" 1fr
"footer footer" auto / 16rem 1fr;
min-height: 100dvh; /* altura de tela, respeita UI móvel */
}
.header { grid-area: header; }
.aside { grid-area: aside; }
.main { grid-area: main; }
.footer { grid-area: footer; }
/* Reorganizar no mobile */
@media (max-width: 768px) {
.page { grid-template:
"header" auto
"main" 1fr
"aside" auto
"footer" auto / 1fr; }
}
7) Alinhamento
- Dentro da célula:
justify-items(x),align-items(y),place-items(atalho). - Distribuição das tracks:
justify-content(x),align-content(y),place-content. - Por item:
justify-self,align-self,place-self.
.grid { place-items: center; } /* centraliza conteúdo nas células */
.item { place-self: start end; }/* y: start, x: end */
8) Fluxo automático
.grid { grid-auto-flow: row; } /* padrão: preenche por linhas */
.grid { grid-auto-flow: column; }
.grid { grid-auto-flow: dense; } /* tenta “preencher buracos” */
/* Alturas/colunas implícitas */
.grid { grid-auto-rows: 12rem; }
9) Receitas rápidas
Cards responsivos
.cards { display:grid; gap:1rem;
grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr)); }
Sidebar + conteúdo
.shell { display:grid; grid-template-columns: 18rem minmax(0,1fr); gap:1rem; }
Layout de página com rodapé colado (sticky footer)
.page { display:grid; min-height:100dvh; grid-template-rows: auto 1fr auto; }
Grade de 12 colunas (utilitário)
.grid-12 { display:grid; grid-template-columns: repeat(12, minmax(0,1fr)); gap:.75rem; }
/* Ex.: ocupar 3 colunas */
.span-3 { grid-column: span 3; }
10) Subgrid (moderno)
Permite que um item de grid herde as linhas/colunas do pai.
.parent { display:grid; grid-template-columns: 12rem 1fr; }
.child { display:grid; grid-template-columns: subgrid; grid-column: 1 / -1; }
Use quando o conteúdo interno precisa alinhar exatamente às colunas do contêiner.
11) Boas práticas e armadilhas
- Prefira
minmax(0, 1fr)em colunas com conteúdo potencialmente longo. - Combine Grid (macro) com Flex (micro) — ex.: grid para a página, flex para alinhar itens dentro das células.
auto-fitvsauto-fill: teste ambos;auto-fitcostuma ser o desejado para “empacotar” cartões.- Use
gapem vez demarginpara espaçar células; evita cálculos de borda. - Para alturas por aspecto, hoje prefira
aspect-ratio(em vez de hacks compadding%). - Depure com DevTools: ative o overlay de grid para ver linhas/áreas.
12) Checklist mental
- Defina o contêiner:
display:grid+gap. - Escolha a malha:
grid-template-columns(erowsse precisar). - Pense em faixas fluidas:
repeat(auto-fit, minmax(...))efr. - Posicione exceções com
grid-column/rowou áreas. - Ajuste alinhamento (
place-items/place-content).
13) Snippets prontos
Mosaico de cards com 3–6 por linha
.cards { display:grid; gap:1rem;
grid-template-columns: repeat(auto-fit, minmax(12rem, 1fr)); }
Três colunas com central dominante
.three { display:grid; gap:1rem;
grid-template-columns: 16rem minmax(0,1fr) 20rem; }
Tabela responsiva estilo “cards” no mobile
.table { display:grid; grid-template-columns: 2fr 1fr 1fr 1fr; }
@media (max-width: 640px){
.table { grid-template-columns: 1fr; }
}