Propriedade grid-template-rows

A propriedade grid-template-rows define a quantidade e a largura das linhas que um elemento ocupará no grid ou grade. No valor da propriedade, especificamos a largura das linhas em qualquer unidade de tamanho. A propriedade é especificada no elemento pai e define a largura das linhas dos elementos filhos.

Ao especificar valores em pixels nas propriedades, os tamanhos das linhas corresponderão exatamente a eles. Se usarmos a palavra auto, as linhas preencherão todo o espaço disponível. O uso da unidade fr (fração) significa que todo o espaço será dividido em partes iguais. A vantagem de fr é sua adaptabilidade a diferentes contêineres ou resoluções de tela, pois fr simplesmente divide-os no número especificado de frações sem vinculação a um tamanho exato em pixels.

Sintaxe

cssseletor {
  grid-template-rows: largura da linha;
}

Exemplo

Vamos definir a largura das linhas para nossos elementos no grid:

html<div id="parent">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
</div>
css#parent {
  display: grid;
  grid-template-rows: 50px 100px 50px 50px;
  border: 2px solid #696989;
  padding: 10px;
  width: 400px;
}
#parent > div {
  padding: 10px;
  border: 1px solid #696989;
}

Результат:

Exemplo

Vamos definir para a primeira e terceira linhas uma largura fixa em pixels, e a segunda linha preencherá automaticamente o espaço disponível:

html<div id="parent">
  <div>1</div>
  <div>2</div>
  <div>3</div>
</div>
css#parent {
  display: grid;
  grid-template-rows: 100px auto 60px;
  border: 2px solid #696989;
  padding: 10px;
  width: 400px;
  height: 200px;
}
#parent > div {
  padding: 10px;
  border: 1px solid #696989;
}

Результат:

Exemplo

Agora, usando a propriedade grid-template-rows, vamos fazer com que a primeira e a segunda linhas ocupem uma parte do contêiner, e a terceira linha - três partes:

html<div id="parent">
  <div>1</div>
  <div>2</div>
  <div>3</div>
</div>
css#parent {
  display: grid;
  grid-template-rows: 1fr 1fr 3fr;
  border: 2px solid #696989;
  padding: 10px;
  width: 400px;
  height: 200px;
}
#parent > div {
  padding: 10px;
  border: 1px solid #696989;
}

Результат:

Exemplo

Os valores especificados em unidades fr podem ser fracionários. Vamos modificar o exemplo anterior, especificando para a segunda e terceira linhas uma largura em números fracionários:

html<div id="parent">
  <div>1</div>
  <div>2</div>
  <div>3</div>
</div>
css#parent {
  display: grid;
  grid-template-rows: 1fr 0.5fr 2.5fr;
  border: 2px solid #696989;
  padding: 10px;
  width: 400px;
  height: 200px;
}
#parent > div {
  padding: 10px;
  border: 1px solid #696989;
}

Результат:

Exemplo

Vamos usar na propriedade grid-template-rows a função repeat(), que informará ao contêiner que todas as três linhas devem ter a mesma largura:

html<div id="parent">
  <div>1</div>
  <div>2</div>
  <div>3</div>
</div>
css#parent {
  display: grid;
  grid-template-rows: repeat(3, 1fr);
  border: 2px solid #696989;
  padding: 10px;
  width: 400px;
  height: 200px;
}
#parent > div {
  padding: 10px;
  border: 1px solid #696989;
}

Результат:

Exemplo

Agora, vamos modificar o exemplo anterior para que às três linhas idênticas seja adicionada uma quarta, que ocupará duas frações do contêiner:

html<div id="parent">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
</div>
css#parent {
  display: grid;
  grid-template-rows: repeat(3, 1fr) 2fr;
  border: 2px solid #696989;
  padding: 10px;
  width: 400px;
  height: 200px;
}
#parent > div {
  padding: 10px;
  border: 1px solid #696989;
}

Результат:

Exemplo

Vamos definir para as duas primeiras linhas uma largura de uma fração do contêiner, e para as duas últimas linhas - duas frações:

html<div id="parent">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
</div>
css#parent {
  display: grid;
  grid-template-rows: repeat(2, 1fr) repeat(2, 2fr);
  border: 2px solid #696989;
  padding: 10px;
  width: 400px;
  height: 200px;
}
#parent > div {
  padding: 10px;
  border: 1px solid #696989;
}

Результат:

Exemplo

Agora, vamos definir a largura das linhas combinando valores especificados usando a função repeat() e unidades livres fr:

html<div id="parent">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
  <div>5</div>
</div>
css#parent {
  display: grid;
  grid-template-rows: repeat(2, 1fr) 3fr repeat(2, 2fr);
  border: 2px solid #696989;
  padding: 10px;
  width: 400px;
  height: 300px;
}
#parent > div {
  padding: 10px;
  border: 1px solid #696989;
}

Результат:

Exemplo

Também na função repeat() podemos especificar o valor auto-fill, que preencherá nosso contêiner com linhas idênticas da largura desejada:

html<div id="parent">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
</div>
css#parent {
  display: grid;
  grid-template-rows: repeat(auto-fill, 50px);
  border: 2px solid #696989;
  padding: 10px;
  width: 400px;
  height: 200px;
}
#parent > div {
  padding: 10px;
  border: 1px solid #696989;
}

Результат:

Exemplo

É muito conveniente usar junto com auto-fill a função minmax, que define um intervalo de largura das linhas de um valor mínimo a um valor máximo. Se a largura do contêiner não couber todas as linhas, algumas delas se moverão para uma nova linha, enquanto as linhas na linha serão distribuídas uniformemente nela. Vamos modificar o exemplo anterior, especificando nele a função minmax:

html<div id="parent">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
</div>
css#parent {
  display: grid;
  grid-template-rows: repeat(auto-fill, minmax(50px, 1fr));
  border: 2px solid #696989;
  padding: 10px;
}
#parent > div {
  padding: 10px;
  border: 1px solid #696989;
}

Результат:

Exemplo

Agora, vamos especificar a propriedade auto-fit, cuja diferença para auto-fill está no fato de que ela ajusta a quantidade de linhas à largura disponível do contêiner, expandindo ou comprimindo-as:

html<div id="parent">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
</div>
css#parent {
  display: grid;
  grid-template-rows: repeat(auto-fit, minmax(100px, 1fr));
  border: 2px solid #696989;
  padding: 10px;
}
#parent > div {
  padding: 10px;
  border: 1px solid #696989;
}

Результат:

Exemplo

Também, junto com fr, podemos usar valores em %, que também definem que parte do contêiner a linha ocupará. Neste caso, primeiro será calculado o tamanho da linha em %, e o espaço livre restante será dividido em frações:

html<div id="parent">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
</div>
css#parent {
  display: grid;
  grid-template-rows: 50% 1fr 2fr 30%;
  border: 2px solid #696989;
  padding: 10px;
  width: 400px;
  height: 400px;
}
#parent > div {
  padding: 10px;
  border: 1px solid #696989;
}

Результат:

Exemplo

Vamos usar juntas as propriedades grid-template-columns e grid-template-rows:

html<div id="parent">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
  <div>5</div>
  <div>6</div>
  <div>7</div>
  <div>8</div>
  <div>9</div>
</div>
css#parent {
  display: grid;
  grid-template-rows: 1fr 1fr 1fr;
  grid-template-columns: 1fr 1fr 1fr;
  border: 2px solid #696989;
  padding: 10px;
  width: 400px;
  height: 400px;
}
#parent > div {
  padding: 10px;
  border: 1px solid #696989;
}

Результат:

Exemplo

Vamos usar as propriedades grid-template-columns e grid-template-rows criar uma tabela de nove células, dispostas em três linhas. Porém, a segunda e a terceira linhas terão a mesma largura, e cada coluna - uma largura diferente:

html<div id="parent">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
  <div>5</div>
  <div>6</div>
  <div>7</div>
  <div>8</div>
  <div>9</div>
</div>
css#parent {
  display: grid;
  grid-template-rows: 60px 1fr 60px;
  grid-template-columns: 20% 1fr 15%;
  border: 2px solid #696989;
  padding: 10px;
  width: 400px;
  height: 400px;
}
#parent > div {
  padding: 10px;
  border: 1px solid #696989;
}

Результат:

Exemplo

Agora, na tabela do exemplo anterior, vamos fazer a linha superior ter uma largura de duas frações, e a primeira coluna - meia fração:

html<div id="parent">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
  <div>5</div>
  <div>6</div>
  <div>7</div>
  <div>8</div>
  <div>9</div>
</div>
css#parent {
  display: grid;
  grid-template-rows: 2fr 1fr 1fr;
  grid-template-columns: 0.5fr 1fr 1fr;
  border: 2px solid #696989;
  padding: 10px;
  width: 400px;
  height: 400px;
}
#parent > div {
  padding: 10px;
  border: 1px solid #696989;
}

Результат:

Veja também

  • a propriedade grid-template-columns,
    que define a quantidade e a largura das colunas no grid
  • a propriedade grid-auto-rows,
    que define a quantidade e a largura das linhas no grid implícito