📐 Capítulo 10: Layout Bidimensional com CSS Grid
Módulo 04: HTML5 e CSS3 Moderno • Bloco 3: Layouts Modernos: Flexbox & CSS Grid
🗺️ Mapa Conceitual do Capítulo
flowchart TD
subgraph GRID_TERMINOLOGY["Anatomia Conceitual do CSS Grid (W3C)"]
CONTAINER["Grid Container (display: grid)"]
LINES["Grid Lines (Linhas Numeradas Positivas e Negativas -1)"]
TRACKS["Grid Tracks (Trilhas de Linhas e Colunas)"]
AREAS["Grid Areas (Células Agrupadas e Áreas Nomeadas)"]
CONTAINER --> LINES --> TRACKS --> AREAS
end
subgraph TRACK_ALGORITHMS["Dimensionamento de Trilhas & Unidade fr"]
FR["Unidade fr (Fração Proporcional do Espaço Restante)"]
MINMAX["minmax(min, max) (Limites Rígidos e Elásticos)"]
AUTOFIT["auto-fit vs auto-fill (Responsividade sem Media Queries)"]
FR --> MINMAX --> AUTOFIT
end
subgraph FLOW_ENGINE["O Motor de Fluxo Implícito & Áreas"]
TEMPLATE_AREAS["grid-template-areas (Mapeamento Visual ASCII)"]
AUTO_FLOW["grid-auto-flow: dense (Algoritmo de Compactação de Espaços)"]
TEMPLATE_AREAS --> AUTO_FLOW
end
GRID_TERMINOLOGY --> TRACK_ALGORITHMS
TRACK_ALGORITHMS --> FLOW_ENGINE
📐 1. A Anatomia do CSS Grid Layout
O CSS Grid Layout é o sistema de layout nativo mais poderoso da plataforma Web. Ao contrário do Flexbox, que opera em uma dimensão por vez, o CSS Grid opera simultaneamente em duas dimensões (linhas e colunas), oferecendo controle geométrico milimétrico:
Vocabulário Canônico da Especificação W3C:
- Grid Container: O elemento pai que estabelece o contexto de formatação de grade via
display: grid. - Grid Lines (Linhas de Grade): As linhas divisórias que delimitam o sistema de coordenadas. São numeradas ordinalmente a partir de
1atéN+1(da esquerda para a direita ou de cima para baixo), e com índices negativos a partir de-1(permitindo referenciar a última linha da grade facilmente). - Grid Tracks (Trilhas): O espaço contíguo entre duas linhas de grade paralelas adjacentes (ou seja, uma coluna inteira ou uma linha inteira).
- Grid Cell (Célula): A menor unidade atômica da grade, resultante da interseção de uma trilha de linha e uma trilha de coluna (semelhante a uma célula de planilha).
- Grid Area (Área da Grade): Uma região retangular composta por qualquer quantidade de células adjacentes.
Linhas de Grade:
1 2 3 4 (ou -1)
│ │ │ │
1 ───┼─────────────┼─────────────┼─────────────┼───
│ Célula (1,1)│ Célula (1,2)│ Célula (1,3)│ ▲ Trilha de Linha
2 ───┼─────────────┼─────────────┼─────────────┼─── (Row Track)
│ Célula (2,1)│ Área Agrupada │ ▼
3 ───┼─────────────┼───────────────────────────┼───
◄─────────────►
Trilha de Coluna (Column Track)
⚖️ 2. A Unidade Fracionária (fr) e a Função minmax()
A unidade fr (fractional unit) representa uma fração do espaço livre disponível após a dedução de todas as larguras fixas (px, rem) e espaçamentos (gap):
/* Sidebar de largura fixa com área de leitura proporcional 2:1 */
.dashboard-grid {
display: grid;
grid-template-columns: 260px 2fr 1fr;
gap: 1.5rem;
}
A Função minmax():
Define uma faixa elástica que impede que uma trilha encolha além de um limite seguro ou cresça além de um teto estipulado:
/* Coluna nunca menor que 200px, mas capaz de crescer até 1fr */
grid-template-columns: minmax(200px, 1fr) 2fr;
🗺️ 3. Arquitetura Declarativa com grid-template-areas
Permite mapear a estrutura visual completa da página de forma semântica, legível e auto-documentada diretamente na folha de estilos:
/* Layout Semântico Completo */
.app-shell {
display: grid;
grid-template-columns: 280px 1fr;
grid-template-rows: 70px 1fr 50px;
grid-template-areas:
"header header"
"sidebar main"
"footer footer";
min-height: 100vh;
}
/* Conexão dos Componentes com as Áreas Nomeadas */
.app-header { grid-area: header; }
.app-sidebar { grid-area: sidebar; }
.app-content { grid-area: main; }
.app-footer { grid-area: footer; }
/* Adaptação para Mobile redefinindo exclusivamente a matriz visual */
@media (max-width: 768px) {
.app-shell {
grid-template-columns: 1fr;
grid-template-rows: auto;
grid-template-areas:
"header"
"main"
"sidebar"
"footer";
}
}
[!TIP] Células Vazias no
grid-template-areas: Se desejar deixar uma célula vazia sem alocar nenhum componente, utilize o caractere ponto.na matriz:"sidebar . main".
🔄 4. O Algoritmo de Responsividade Fluida: auto-fit vs auto-fill
A combinação de repeat(), palavras-chave automáticas e minmax() cria galerias fluidas que recalculam o número de colunas sem media queries:
.card-gallery {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 1.5rem;
}
| Palavra-Chave | Comportamento com Poucos Itens | Aplicação Ideal |
|---|---|---|
auto-fit |
Colapsa trilhas vazias e estica os itens existentes para preencher toda a largura da tela até $1\text{fr}$. | Galerias de cards, catálogos de produtos e dashboards. |
auto-fill |
Preserva trilhas vazias invisíveis à direita, mantendo o tamanho estrito dos itens existentes sem expandi-los. | Menus de ferramentas e interfaces tipo prateleira/dock. |
⚡ 5. O Grid Implícito e o Algoritmo grid-auto-flow: dense
Quando elementos HTML adicionais são inseridos dinamicamente via JavaScript e excedem as trilhas definidas no template, o navegador cria o Grid Implícito (Implicit Grid):
grid-auto-rows: minmax(120px, auto);: Controla a altura padrão de linhas geradas dinamicamente.grid-auto-flow: dense;: O algoritmo de compactação densa do CSS Grid. Se houver itens de tamanhos assimétricos (ex.: fotos widescreengrid-column: span 2e fotos normais), o algoritmo volta no fluxo do documento e preenche buracos deixados para trás com itens menores, evitando espaços mortos na galeria.