Função repeat(): Simplificando a criação de linhas e colunas
Aprenda a usar repeat() para criar múltiplas linhas ou colunas com o mesmo padrão.
Você já aprendeu a definir suas colunas e linhas usando grid-template-columns e grid-template-rows. Imagine que você precisa criar um grid com 12 colunas de largura igual, ou 5 linhas de 100px. Escrever 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr; ou 100px 100px 100px 100px 100px; pode ser repetitivo e cansativo.
É aí que entra a função repeat(). Ela é aplicada nas propriedades grid-template-columns e grid-template-rows e permite que você crie um padrão repetitivo de colunas ou linhas de forma concisa e eficiente.
Pense na função repeat() como um "carimbo" ou "multiplicador" para suas trilhas de grid. Em vez de desenhar cada coluna ou linha individualmente, você diz: "Carimbe este padrão X vezes".
Como funciona a função repeat()
A função repeat() aceita dois argumentos:
quantidade: O número de vezes que o padrão deve ser repetido. Pode ser um número inteiro positivo.tamanho_da_trilha: O tamanho da coluna ou linha que será repetida. Pode ser qualquer valor válido para o tamanho de uma trilha (px, %, fr, auto, min-content, max-content, minmax()).
Sintaxe:
.grid-container {
grid-template-columns: repeat(quantidade, tamanho_da_trilha);
grid-template-rows: repeat(quantidade, tamanho_da_trilha);
}
Exemplos de Uso:
grid-template-columns: repeat(3, 1fr);- Equivalente a:
grid-template-columns: 1fr 1fr 1fr; - Cria 3 colunas de largura igual.
- Equivalente a:
grid-template-rows: repeat(4, 100px);- Equivalente a:
grid-template-rows: 100px 100px 100px 100px; - Cria 4 linhas de 100px de altura.
- Equivalente a:
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));- Este é um uso muito poderoso para layouts responsivos!
auto-fill: O Grid cria o máximo de colunas (ou linhas) que couberem no contêiner.minmax(200px, 1fr): Cada coluna terá no mínimo 200px e no máximo 1 fração do espaço disponível.- Isso cria um grid onde as colunas se ajustam automaticamente, mantendo um tamanho mínimo de 200px e preenchendo o espaço restante.
grid-template-columns: 100px repeat(2, 1fr) 50px;- Você pode combinar
repeat()com definições de trilhas individuais. - Cria uma coluna de 100px, seguida por duas colunas de
1fr, e termina com uma coluna de 50px.
- Você pode combinar
Vantagens da função repeat()
- Concisão: Reduz drasticamente a quantidade de código CSS, especialmente para grids com muitas trilhas.
- Legibilidade: Torna o código mais fácil de ler e entender a intenção do layout.
- Responsividade Avançada: Combinada com
auto-fill(ouauto-fit) eminmax(), permite criar layouts de grid que se adaptam de forma inteligente ao tamanho da tela, sem a necessidade de muitas media queries.
Exemplo Prático:
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<title>Função repeat() no CSS Grid</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 20px;
background-color: #f4f4f4;
}
.grid-container {
display: grid;
gap: 10px;
background-color: #e0e0e0;
border: 2px solid #333;
padding: 10px;
width: 90%;
min-height: 200px; /* Altura mínima para visualização */
margin: 0 auto 30px auto;
}
.grid-item {
background-color: lightblue;
border: 1px solid blue;
padding: 15px;
color: #333;
font-weight: bold;
text-align: center;
display: flex;
justify-content: center;
align-items: center;
}
/* --- Exemplos com repeat() --- */
.container-repeat-fr {
grid-template-columns: repeat(4, 1fr); /* 4 colunas iguais */
grid-template-rows: repeat(2, 100px); /* 2 linhas de 100px */
}
.container-repeat-mixed {
grid-template-columns: 100px repeat(2, 1fr) 50px; /* Coluna fixa, 2 flexíveis, coluna fixa */
grid-template-rows: repeat(3, auto); /* 3 linhas auto-ajustáveis */
}
.container-repeat-auto-fill {
grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); /* Colunas que se ajustam */
grid-template-rows: repeat(auto-fill, minmax(80px, auto)); /* Linhas que se ajustam */
}
</style>
</head>
<body>
<h1>Função `repeat()` no CSS Grid</h1>
<h2>`repeat(4, 1fr)` e `repeat(2, 100px)`</h2>
<div class="grid-container container-repeat-fr">
<div class="grid-item">Item 1</div>
<div class="grid-item">Item 2</div>
<div class="grid-item">Item 3</div>
<div class="grid-item">Item 4</div>
<div class="grid-item">Item 5</div>
<div class="grid-item">Item 6</div>
<div class="grid-item">Item 7</div>
<div class="grid-item">Item 8</div>
</div>
<p>Cria 4 colunas de largura igual e 2 linhas de 100px de altura.</p>
<h2>Combinando `repeat()` com trilhas individuais</h2>
<div class="grid-container container-repeat-mixed">
<div class="grid-item">Fixo 100px</div>
<div class="grid-item">1fr</div>
<div class="grid-item">1fr</div>
<div class="grid-item">Fixo 50px</div>
<div class="grid-item">Fixo 100px</div>
<div class="grid-item">1fr</div>
<div class="grid-item">1fr</div>
<div class="grid-item">Fixo 50px</div>
<div class="grid-item">Fixo 100px</div>
<div class="grid-item">1fr</div>
<div class="grid-item">1fr</div>
<div class="grid-item">Fixo 50px</div>
</div>
<p>Observe a sequência de colunas: 100px, 1fr, 1fr, 50px. As linhas se ajustam ao conteúdo.</p>
<h2>`repeat(auto-fill, minmax(150px, 1fr))` para colunas responsivas</h2>
<div class="grid-container container-repeat-auto-fill">
<div class="grid-item">Item 1</div>
<div class="grid-item">Item 2</div>
<div class="grid-item">Item 3</div>
<div class="grid-item">Item 4</div>
<div class="grid-item">Item 5</div>
<div class="grid-item">Item 6</div>
<div class="grid-item">Item 7</div>
<div class="grid-item">Item 8</div>
<div class="grid-item">Item 9</div>
<div class="grid-item">Item 10</div>
</div>
<p>Redimensione a janela! As colunas se ajustam automaticamente, mantendo um mínimo de 150px e preenchendo o espaço.</p>
</body>
</html>
Resultado:
- Você verá vários contêineres grid, demonstrando o uso da função
repeat(). - No último exemplo, redimensione a janela do navegador para ver como as colunas se ajustam automaticamente, adicionando ou removendo colunas conforme o espaço disponível, graças a
auto-filleminmax().
Boas Práticas:
- Use
repeat()para padrões: Sempre que você tiver várias colunas ou linhas com o mesmo tamanho ou padrão, userepeat()para simplificar seu código. auto-fillvs.auto-fit:auto-fill: Preenche o espaço com o máximo de trilhas possível, mesmo que algumas fiquem vazias.auto-fit: É semelhante aauto-fill, mas se houver espaço extra e trilhas vazias, ele "estica" as trilhas existentes para preencher o espaço. Useauto-fitquando quiser que as trilhas existentes se expandam para ocupar o espaço extra, eauto-fillquando quiser manter o número de trilhas, mesmo que algumas fiquem vazias.
- Combine com
minmax(): A combinaçãorepeat(auto-fill, minmax(min, max))é um padrão de ouro para criar grids responsivos que se adaptam a qualquer tamanho de tela.
A função repeat() é uma ferramenta poderosa para criar grids de forma mais eficiente e para construir layouts responsivos complexos com menos código.