CSS Grid vs Flex: perceber as diferenças e quando usar

CSS Grid vs Flex: perceber as diferenças e quando usar

O CSS Grid e o Flexbox são dois métodos de layout em CSS que permitem criar designs complexos e flexíveis para a web. Servem para coisas parecidas, mas cada um tem as suas funcionalidades próprias e os seus casos ideais. Neste CSS Grid vs Flex vamos ver as vantagens e as desvantagens de cada um e quando é preferível usar um ou outro.

Display Grid

Display Grid é um sistema de layout em grelha, pensado para designs assentes numa grelha. Permite-te definir linhas e colunas na tua página e colocar elementos dentro dessas linhas e colunas. Ou seja, consegues alinhar e organizar os elementos da página de forma coerente e estruturada sem esforço.

Aqui fica um exemplo de código HTML/CSS que usa o CSS Grid para criar uma grelha de 3 colunas e 3 linhas:

1
2
3
4
5
6
7
8
9

Código HTML Grid

html
<div class="grid-container">
  <div class="grid-item">1</div>
  <div class="grid-item">2</div>
  <div class="grid-item">3</div>
  <div class="grid-item">4</div>
  <div class="grid-item">5</div>
  <div class="grid-item">6</div>
  <div class="grid-item">7</div>
  <div class="grid-item">8</div>
  <div class="grid-item">9</div>
</div>

Código CSS Grid

css
.grid-container {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    grid-template-rows: repeat(3, 1fr);
    gap: 1rem;
    border: 1px dashed #000;
    padding: 5px;
}

.grid-item {
    background: #e74c3c;
    padding: .5rem;
    color: white;
    text-align: center;
}

Display Flex

Flexbox é um sistema de layout pensado para criar layouts flexíveis capazes de se adaptar a tamanhos de ecrã e de contentor variáveis. Permite-te definir dimensões relativas para os elementos do teu layout e alinhá-los com precisão.

Outro exemplo de código HTML/CSS, desta vez com Flexbox para alinhar:

Logótipo
Menu
Campo de Pesquisa

Código HTML Flex

html
<div class="flex-container">
  <div class="flex-item">Logo</div>
  <div class="flex-item">Menu</div>
  <div class="flex-item">Champ de Recherche</div>
</div>

Código CSS Flex

html
.flex-container {
  display: flex;
  justify-content: center;
  gap: 1rem;
  border: 1px dashed #000;
  padding: 5px;
}

.flex-item {
    border: 1px dashed #e74c3c;
    padding: 10px;
}

Comparação entre Flex e Grid

CSS Grid vs Flex: o mesmo código, agora em Grid. Vais perceber a diferença no tamanho relativo dos elementos.

Logótipo
Menu
Campo de Pesquisa

Código HTML Grid vs Flex

html
<div class="grid-container">
  <div class="grid-item">Logo</div>
  <div class="grid-item">Menu</div>
  <div class="grid-item">Champ de Recherche</div>
</div>
Atenção

O grande espaço entre o exemplo e o código HTML não é um bug do teu browser. Indicámos à nossa grelha 3 colunas e 3 linhas, por isso ela respeita a estrutura aconteça o que acontecer. O Display Grid segue à letra a estrutura que lhe demos em CSS mesmo que não haja elementos filhos .grid-item!

CSS Grid ou Flex: quando usar um ou outro?

Convém perceber as vantagens e as desvantagens de cada ferramenta para escolher a que melhor serve o teu projeto. Em geral, o CSS Grid é ideal para designs assentes numa grelha, como os portefólios e as galerias de imagens, ao passo que o Flexbox é ideal para designs flexíveis e responsivos, como os menus flex e as barras de ferramentas.

Aqui fica um exemplo para explicar melhor: imagina que queres criar o layout da página inicial de um site de e-commerce. Esse layout tem de conter imagens de produtos em destaque, secções para as categorias de produtos, uma barra de navegação e um formulário de pesquisa. Neste caso, podias usar o CSS Grid para organizar as imagens dos produtos em destaque numa grelha e usar o Flexbox para alinhar as secções das categorias de produtos, a barra de navegação e o formulário de pesquisa de forma eficaz.

estas duas ferramentas também podem ser usadas em conjunto para criar designs ainda mais avançados. Por exemplo, podes usar o CSS Grid para criar uma grelha de colunas e linhas e depois o Flexbox para alinhar os elementos dentro de cada célula da grelha. Assim combinas as vantagens de cada ferramenta e chegas a designs mais potentes e mais flexíveis.

Em resumo, o CSS Grid é a ferramenta ideal para designs assentes numa grelha, como os portefólios e as galerias de imagens, ao passo que o Flexbox é a ferramenta ideal para designs flexíveis e responsivos, como os menus flexbox e as barras de ferramentas. Usando os dois em conjunto, consegues criar designs ainda mais avançados para responder às necessidades do teu projeto.

CSSHTML

Damien Flandrin Programador web desde 2010, criador da Gekkode e do Email Impact. Cada artigo é testado num projeto real antes de ser publicado. Contacto
Newsletter

Os novos testes, tutoriais e projetos, por e-mail.

Testes reproduzíveis, código versionado, resultados datados. Nunca spam.