Fundamentos da Web com HTML e CSS
CSS Grid Básico: Estrutura em Duas Dimensões
Aprenda sobre css grid básico: estrutura em duas dimensões
📐 CSS Grid Básico: Estrutura em Duas Dimensões
Olá, futuro(a) desenvolvedor(a) web! 👋 Nesta aula, vamos mergulhar em um dos módulos mais poderosos do CSS para criação de layouts complexos: o CSS Grid Layout. Prepare-se para pensar em duas dimensões!
1. Introdução ao CSS Grid 🚀
Até agora, você aprendeu sobre o CSS Flexbox, uma ferramenta incrível para organizar itens em uma única dimensão (linha ou coluna). Mas e se precisarmos de um controle mais preciso sobre layouts que envolvem linhas E colunas simultaneamente? É aí que o CSS Grid entra em cena!
O CSS Grid é um sistema de layout bidimensional que permite que você divida o espaço disponível em um container em linhas e colunas, posicionando elementos de forma muito flexível e intuitiva. Pense nele como uma "grade" ou "tabela" invisível onde você pode arranjar seus componentes.
Por que usar CSS Grid?
- Controle Bidimensional: Gerencie linhas e colunas ao mesmo tempo.
- Layouts Complexos: Ideal para layouts de página inteira (cabeçalho, barra lateral, conteúdo principal, rodapé).
- Responsividade Simplificada: Facilita a adaptação do layout para diferentes tamanhos de tela.
- Clareza e Manutenibilidade: O código CSS para o layout se torna mais legível e fácil de manter.
2. Explicação Detalhada com Exemplos 🧑🏫
Para começar a usar o CSS Grid, precisamos entender alguns conceitos fundamentais e propriedades CSS.
2.1. O Grid Container e Grid Items
Assim como no Flexbox, o CSS Grid opera com a ideia de um container e seus itens.
- Grid Container: O elemento pai onde você aplica as propriedades do Grid. É ele quem define a grade.
- Grid Items: Os filhos diretos do Grid Container. Eles serão posicionados dentro da grade.
2.2. display: grid - Ativando o Grid 💡
A primeira propriedade que você precisa aplicar ao seu elemento pai para transformá-lo em um Grid Container é display: grid.
.container {
display: grid;
}Ao fazer isso, os filhos diretos desse container se tornam Grid Items e estão prontos para serem organizados na grade. Por padrão, sem outras propriedades, eles se organizarão em uma única coluna, uma abaixo da outra, como blocos normais.
2.3. grid-template-columns e grid-template-rows - Definindo a Estrutura 📏
Estas são as propriedades centrais para definir a estrutura explícita da sua grade, ou seja, quantas colunas e linhas você quer e qual o tamanho delas.
grid-template-columns
Define o número e o tamanho das colunas da sua grade.
Valores comuns:
- Comprimentos absolutos/relativos:
px,em,%..container { display: grid; grid-template-columns: 100px 200px 150px; /* Três colunas com tamanhos fixos */ } auto: A coluna se ajusta automaticamente ao conteúdo ou ao espaço restante..container { display: grid; grid-template-columns: 1fr auto 1fr; /* Coluna do meio se ajusta, laterais com 1fr */ }fr(Fractional Unit): Unidade de fração. Divide o espaço disponível em proporções.1frsignifica uma fração do espaço disponível.1fr 2fr 1frcriaria três colunas, onde a do meio é o dobro do tamanho das laterais.- É a unidade mais poderosa para layouts responsivos.
.container { display: grid; grid-template-columns: 1fr 1fr 1fr; /* Três colunas de tamanhos iguais */ }repeat(): Uma função que simplifica a repetição de padrões de colunas/linhas.- Sintaxe:
repeat(quantidade, tamanho)
.container { display: grid; grid-template-columns: repeat(3, 1fr); /* O mesmo que 1fr 1fr 1fr */ grid-template-columns: repeat(2, 100px 1fr); /* O mesmo que 100px 1fr 100px 1fr */ }auto-fill/auto-fit: Usados comrepeat()para criar colunas que se ajustam automaticamente ao espaço disponível, preenchendo o container. (Um pouco mais avançado, mas bom para saber que existe para layouts responsivos).
.container { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); /* Cria o máximo de colunas de 200px possível, que se expandem para preencher o espaço */ }- Sintaxe:
grid-template-rows
Define o número e o tamanho das linhas da sua grade. Funciona exatamente da mesma forma que grid-template-columns, mas para as linhas.
.container {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-template-rows: 100px auto 50px; /* Três linhas: 100px, altura automática, 50px */
}2.4. gap (ou grid-gap) - Espaçamento entre Células ↔️↕️
Para adicionar espaço entre as colunas e linhas da sua grade, você pode usar as propriedades gap, row-gap e column-gap.
gap: Uma shorthand pararow-gapecolumn-gap.- Se um valor: aplica o mesmo gap para linhas e colunas.
gap: 20px; - Se dois valores: primeiro para
row-gap, segundo paracolumn-gap.gap: 10px 20px;
- Se um valor: aplica o mesmo gap para linhas e colunas.
row-gap: Espaçamento entre as linhas.column-gap: Espaçamento entre as colunas.
Nota: A propriedade grid-gap (e suas variantes grid-row-gap, grid-column-gap) foi renomeada para gap (e row-gap, column-gap) para ser consistente com o Flexbox. Embora grid-gap ainda funcione, é recomendado usar gap.
.container {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(2, 100px);
gap: 15px; /* Espaçamento de 15px entre todas as células */
}
/* Ou */
.container-alt {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(2, 100px);
row-gap: 10px; /* 10px entre as linhas */
column-gap: 20px; /* 20px entre as colunas */
}3. Código de Exemplo Oficial 🌐
Vamos montar um exemplo completo para visualizar esses conceitos. Imagine que queremos criar um layout simples de 3 colunas e 2 linhas, com espaçamento entre os itens.
HTML:
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Exemplo Básico de CSS Grid</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="grid-container">
<div class="grid-item item-1">Item 1</div>
<div class="grid-item item-2">Item 2</div>
<div class="grid-item item-3">Item 3</div>
<div class="grid-item item-4">Item 4</div>
<div class="grid-item item-5">Item 5</div>
<div class="grid-item item-6">Item 6</div>
</div>
</body>
</html>CSS (style.css):
body {
font-family: 'Arial', sans-serif;
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
margin: 0;
background-color: #f0f2f5;
}
.grid-container {
display: grid; /* 👈 Ativa o Grid */
/* Define 3 colunas de tamanhos iguais */
grid-template-columns: 1fr 1fr 1fr;
/* Equivalente a: grid-template-columns: repeat(3, 1fr); */
/* Define 2 linhas de 100px de altura */
grid-template-rows: 100px 100px;
/* Equivalente a: grid-template-rows: repeat(2, 100px); */
gap: 20px; /* 👈 Adiciona um espaçamento de 20px entre as células */
width: 90%; /* Largura do container para melhor visualização */
max-width: 800px;
padding: 20px;
background-color: #ffffff;
border-radius: 8px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
}
.grid-item {
background-color: #66b3ff; /* Cor de fundo para os itens */
color: white;
display: flex;
justify-content: center;
align-items: center;
font-size: 1.2em;
border-radius: 5px;
padding: 10px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
}
/* Cores diferentes para os itens para melhor distinção */
.item-1 { background-color: #4CAF50; }
.item-2 { background-color: #2196F3; }
.item-3 { background-color: #FFC107; }
.item-4 { background-color: #FF5722; }
.item-5 { background-color: #9C27B0; }
.item-6 { background-color: #00BCD4; }Resultado: Você verá um container com 6 itens dispostos em 3 colunas e 2 linhas, cada item com 100px de altura e as colunas dividindo o espaço igualmente. Haverá um espaçamento de 20px entre eles.
4. Exercícios/Desafios (Próximas Aulas) 📝
Esta aula focou na teoria e nos conceitos básicos do CSS Grid. Em aulas futuras, teremos desafios práticos onde você poderá aplicar esses conhecimentos para construir layouts reais e complexos! Fique ligado(a)!
5. Resumo e Próximos Passos 🎯
Parabéns! Você deu os primeiros passos no mundo do CSS Grid.
O que aprendemos hoje:
- O CSS Grid é um poderoso sistema de layout bidimensional para organizar elementos em linhas e colunas.
- Para ativá-lo, usamos
display: gridno container pai. - Definimos a estrutura de colunas com
grid-template-columnse de linhas comgrid-template-rows. - A unidade
fré essencial para layouts flexíveis, dividindo o espaço disponível. - A função
repeat()simplifica a criação de padrões repetitivos de colunas/linhas. - Usamos
gap(ourow-gap,column-gap) para adicionar espaçamento entre as células da grade.
O CSS Grid é uma ferramenta fundamental para qualquer desenvolvedor web moderno. Começar com esses conceitos básicos é o primeiro passo para dominar layouts complexos e responsivos.
Próximos passos:
Nas próximas aulas, exploraremos como posicionar itens específicos dentro da grade usando grid-column e grid-row, como nomear áreas da grade com grid-template-areas, e como o Grid lida com o conteúdo que excede a grade explícita (Grid Implícito).
Continue praticando e experimentando! Até a próxima! 👋