teoria

CSS Grid Básico: Estrutura em Duas Dimensões

Aprenda sobre css grid básico: estrutura em duas dimensões

40 min
Aula 4 de 6

📐 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.
    • 1fr significa uma fração do espaço disponível.
    • 1fr 2fr 1fr criaria 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 com repeat() 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 */
    }

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 para row-gap e column-gap.
    • Se um valor: aplica o mesmo gap para linhas e colunas. gap: 20px;
    • Se dois valores: primeiro para row-gap, segundo para column-gap. gap: 10px 20px;
  • 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: grid no container pai.
  • Definimos a estrutura de colunas com grid-template-columns e de linhas com grid-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 (ou row-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! 👋

© 2025 Escola All Dev. Todos os direitos reservados.