W3docs

Propriedade CSS grid

Aprenda o atalho CSS grid: sintaxe, formas de valor, unidades fr, áreas nomeadas, auto-flow e exemplos práticos de layout com demos ao vivo.

A propriedade CSS grid é uma abreviação que permite definir um layout CSS Grid completo em uma única declaração. Ela define as seguintes seis sub-propriedades de uma vez no contêiner grid:

A propriedade grid se aplica apenas a um contêiner grid — um elemento com display: grid ou display: inline-grid.

Importante: Qualquer sub-propriedade que você não mencionar em uma declaração grid é redefinida para seu valor inicial. Esta é a principal diferença em relação a definir sub-propriedades individualmente — grid sempre começa do zero.

Faixas explícitas vs. implícitas

Compreender essa distinção é a chave para interpretar qualquer valor grid:

  • Faixas explícitas são as linhas e colunas que você define manualmente. O / no valor separa as linhas (à esquerda) das colunas (à direita): grid: 100px 200px / 1fr 1fr significa duas linhas explícitas e duas colunas explícitas.
  • Faixas implícitas são linhas ou colunas extras que o navegador cria automaticamente quando há mais itens do que o grid explícito suporta. grid-auto-rows / grid-auto-columns definem seus tamanhos, e grid-auto-flow decide se o excesso vai para novas linhas (o padrão) ou novas colunas.

Você pode especificar ou as propriedades explícitas ou as implícitas em um único atalho grid — não ambas ao mesmo tempo.

A unidade fr

Layouts grid frequentemente usam fr (unidade de fração). 1fr significa "uma parte do espaço disponível". Três colunas definidas como 1fr 1fr 1fr recebem cada uma um terço da largura do contêiner. Você também pode combinar fr com tamanhos fixos: 200px 1fr dá à primeira coluna 200 px e à segunda coluna todo o espaço restante.

Sintaxe

/* Keyword */
grid: none;

/* Explicit rows / columns */
grid: <grid-template-rows> / <grid-template-columns>;

/* Template areas */
grid: <grid-template>;

/* Implicit rows, explicit columns */
grid: [ auto-flow && dense? ] <grid-auto-rows>? / <grid-template-columns>;

/* Explicit rows, implicit columns */
grid: <grid-template-rows> / [ auto-flow && dense? ] <grid-auto-columns>?;

/* Global values */
grid: inherit;
grid: initial;
grid: unset;

A notação && significa que ambas as palavras-chave devem aparecer; a ordem não importa. O ? indica que o termo é opcional.

Valor Inicialnone
Aplica-se aContêineres grid
HerdadoNão
AnimávelSim (layout grid é animável)
Versão CSSCSS Grid Layout Module Level 1
Sintaxe DOMelement.style.grid = "100px / 1fr 1fr"

Formas de valor

ValorO que faz
noneRemove qualquer template explícito; todas as sub-propriedades são redefinidas para o valor inicial.
<template-rows> / <template-columns>Define faixas de linhas e colunas explícitas.
<grid-template>Abreviação para grid-template-rows, grid-template-columns e grid-template-areas.
<template-rows> / auto-flow [dense] [<auto-cols>]Linhas explícitas; colunas são geradas automaticamente. Adicione dense para preencher lacunas.
auto-flow [dense] [<auto-rows>] / <template-cols>Linhas são geradas automaticamente; colunas são explícitas.
initialRedefine a propriedade para seu valor padrão (none).
inheritHerda o valor calculado do elemento pai.

Exemplos

Exemplo 1: Grid explícito básico

grid: 100px / auto auto auto cria uma linha explícita (100 px de altura) e três colunas de largura auto iguais. As nove caixas transbordam para linhas implícitas adicionais (dimensionadas automaticamente):

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      .grid-container {
        display: grid;
        grid: 100px / auto auto auto;
        background-color: #ccc;
        padding: 10px;
      }
      .grid-box {
        background-color: #eee;
        border: 1px solid rgba(0, 0, 0, 0.8);
        padding: 30px;
        font-size: 30px;
        text-align: center;
      }
    </style>
  </head>
  <body>
    <h2>Grid property example</h2>
    <div class="grid-container">
      <div class="grid-box">1</div>
      <div class="grid-box">2</div>
      <div class="grid-box">3</div>
      <div class="grid-box">4</div>
      <div class="grid-box">5</div>
      <div class="grid-box">6</div>
      <div class="grid-box">7</div>
      <div class="grid-box">8</div>
      <div class="grid-box">9</div>
    </div>
  </body>
</html>

Exemplo 2: Auto-flow em colunas

grid: auto auto / auto-flow define duas linhas explícitas e instrui o navegador a gerar colunas automaticamente ao posicionar os itens. Cada item flui para uma nova coluna até que todos os itens sejam posicionados, preenchendo ambas as linhas coluna por coluna.

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      .grid-container {
        display: grid;
        grid: auto auto / auto-flow;
        gap: 5px;
        background-color: #1c87c9;
        padding: 10px;
      }
      .grid-container > div {
        background-color: rgba(255, 255, 255, 0.8);
        text-align: center;
        padding: 20px 0;
        font-size: 20px;
      }
    </style>
  </head>
  <body>
    <h2>Grid property example</h2>
    <div class="grid-container">
      <div class="grid-box1">1</div>
      <div class="grid-box2">2</div>
      <div class="grid-box3">3</div>
      <div class="grid-box4">4</div>
    </div>
  </body>
</html>
Propriedade CSS grid

Exemplo 3: Posicionamento explícito de itens com grid-area

Cada caixa é posicionada com grid-area usando a sintaxe row-start / column-start / row-end / column-end sobre um template grid: 100px / auto auto auto:

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      .grid-box1 {
        grid-area: 1 / 1 / 2 / 2;
      }
      .grid-box2 {
        grid-area: 1 / 2 / 2 / 3;
      }
      .grid-box3 {
        grid-area: 1 / 3 / 2 / 4;
      }
      .grid-box4 {
        grid-area: 2 / 1 / 3 / 2;
      }
      .grid-box5 {
        grid-area: 2 / 2 / 3 / 3;
      }
      .grid-box6 {
        grid-area: 2 / 3 / 3 / 4;
      }
      .grid-container {
        display: grid;
        grid: 100px / auto auto auto;
        gap: 10px;
        background-color: #1c87c9;
        padding: 10px;
      }
      .grid-container > div {
        background-color: #eee;
        text-align: center;
        padding: 20px 0;
        font-size: 25px;
      }
    </style>
  </head>
  <body>
    <h2>Grid property example</h2>
    <div class="grid-container">
      <div class="grid-box1">1</div>
      <div class="grid-box2">2</div>
      <div class="grid-box3">3</div>
      <div class="grid-box4">4</div>
      <div class="grid-box5">5</div>
      <div class="grid-box6">6</div>
    </div>
  </body>
</html>

Exemplo 4: Unidades fr para colunas flexíveis

Usar unidades fr é o padrão mais comum para grids responsivos. As três colunas abaixo recebem cada uma uma parte igual da largura disponível e encolhem ou crescem juntas:

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      .grid-container {
        display: grid;
        grid: auto / 1fr 1fr 1fr;
        gap: 10px;
        background-color: #1c87c9;
        padding: 10px;
      }
      .grid-container > div {
        background-color: rgba(255, 255, 255, 0.9);
        text-align: center;
        padding: 20px;
        font-size: 20px;
      }
    </style>
  </head>
  <body>
    <h2>Three equal columns with fr units</h2>
    <div class="grid-container">
      <div>A</div>
      <div>B</div>
      <div>C</div>
      <div>D</div>
      <div>E</div>
      <div>F</div>
    </div>
  </body>
</html>

A regra grid: auto / 1fr 1fr 1fr é equivalente à forma mais verbosa:

grid-template-rows: auto;
grid-template-columns: 1fr 1fr 1fr;
/* all other grid sub-properties reset to initial */

Exemplo 5: Áreas de template nomeadas

O atalho grid suporta diretamente a sintaxe de grid-template-areas. Cada string entre aspas representa uma linha; cada palavra dentro é um nome de área. Um . (ponto) marca uma célula vazia.

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      .layout {
        display: grid;
        grid:
          "header header header" 60px
          "sidebar main   main"  1fr
          "footer footer footer" 40px
          / 160px 1fr 1fr;
        gap: 8px;
        height: 260px;
        background-color: #ccc;
        padding: 8px;
      }
      .header  { grid-area: header;  background: #1c87c9; color: #fff; display: flex; align-items: center; justify-content: center; }
      .sidebar { grid-area: sidebar; background: #8ecae6; display: flex; align-items: center; justify-content: center; }
      .main    { grid-area: main;    background: #eee;    display: flex; align-items: center; justify-content: center; }
      .footer  { grid-area: footer;  background: #023e8a; color: #fff; display: flex; align-items: center; justify-content: center; }
    </style>
  </head>
  <body>
    <div class="layout">
      <div class="header">Header</div>
      <div class="sidebar">Sidebar</div>
      <div class="main">Main content</div>
      <div class="footer">Footer</div>
    </div>
  </body>
</html>

O valor após cada string de linha entre aspas (60px, 1fr, 40px) é a altura da linha. O / ao final inicia a lista de larguras de colunas (160px 1fr 1fr).

Quando usar grid vs. grid-template

ObjetivoUse
Definir apenas tamanhos de linhas/colunas explícitas e áreas nomeadasgrid-template
Também controlar a direção de posicionamento automático ou tamanhos de faixas implícitasgrid
Definir apenas larguras de colunasgrid-template-columns
Definir apenas alturas de linhasgrid-template-rows

Optar pelo atalho mais específico torna o seu código mais fácil de ler e evita redefinir acidentalmente sub-propriedades não relacionadas.

Suporte a navegadores

O atalho grid é suportado em todos os navegadores modernos (Chrome 57+, Firefox 52+, Safari 10.1+, Edge 16+). Para ambientes mais antigos, pode ser necessário definir sub-propriedades individualmente. Verifique os dados de suporte atuais em Can I use: CSS Grid Layout.

Veja também

Prática

Prática
Quais das seguintes afirmações sobre a propriedade abreviada CSS grid estão corretas?
Quais das seguintes afirmações sobre a propriedade abreviada CSS grid estão corretas?
Was this page helpful?