Propriedade grid-template-columns: Definindo as colunas
Crie as colunas do seu layout grid, especificando seus tamanhos.
Depois de transformar um elemento em um Contêiner Grid com display: grid;, o próximo passo crucial é definir a estrutura das suas colunas. É para isso que serve a propriedade grid-template-columns.
A propriedade grid-template-columns é aplicada ao Contêiner Grid e permite que você especifique o número de colunas e o tamanho de cada uma delas.
Pense no grid-template-columns como o "arquiteto" que desenha as divisões verticais do seu layout. Você decide quantas colunas quer e qual a largura de cada uma.
Como funciona grid-template-columns
Você define os tamanhos das colunas listando-os, separados por espaços. Cada valor representa a largura de uma coluna.
Valores Comuns:
Unidades de Medida Fixas (px, em, rem, %):
- Você pode definir larguras fixas para suas colunas.
- Ex:
grid-template-columns: 100px 200px 50px;(cria 3 colunas com essas larguras fixas). - Ex:
grid-template-columns: 25% 50% 25%;(cria 3 colunas que ocupam porcentagens da largura do contêiner).
Unidade
fr(Fractional Unit):- Esta é uma unidade exclusiva do Grid e é incrivelmente poderosa para layouts flexíveis.
frsignifica "fraction" (fração).1frrepresenta uma parte do espaço disponível.- Ex:
grid-template-columns: 1fr 1fr 1fr;(cria 3 colunas de largura igual, dividindo o espaço disponível igualmente). - Ex:
grid-template-columns: 1fr 2fr 1fr;(cria 3 colunas; a segunda coluna será o dobro da largura da primeira e da terceira). - Ex:
grid-template-columns: 100px 1fr 2fr;(cria uma coluna de 100px, e o espaço restante é dividido em 3 partes, com a segunda coluna pegando 1 parte e a terceira pegando 2 partes).
auto:- A coluna se ajusta automaticamente ao tamanho do conteúdo que ela contém.
- Ex:
grid-template-columns: auto 1fr auto;(as colunas das extremidades se ajustam ao conteúdo, e a coluna do meio ocupa o espaço restante).
min-content:- A coluna terá a menor largura possível sem quebrar o conteúdo (ou seja, a largura da palavra mais longa ou do elemento mais largo que não pode ser quebrado).
max-content:- A coluna terá a largura necessária para exibir todo o conteúdo em uma única linha, sem quebras.
minmax(min, max):- Define um intervalo de tamanho para a coluna. A coluna terá no mínimo
mine no máximomax. - Ex:
grid-template-columns: minmax(100px, 1fr) 200px;(a primeira coluna terá no mínimo 100px e no máximo 1 fração do espaço disponível, a segunda terá 200px).
- Define um intervalo de tamanho para a coluna. A coluna terá no mínimo
Exemplo Prático:
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<title>Grid Template Columns</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 20px;
background-color: #f4f4f4;
}
.grid-container {
display: grid;
/* grid-template-rows: 100px 100px; */ /* Definindo linhas para melhor visualização */
gap: 10px;
background-color: #e0e0e0;
border: 2px solid #333;
padding: 10px;
width: 90%; /* Contêiner mais largo para ver o efeito das colunas */
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;
min-height: 50px; /* Altura mínima para os itens */
}
/* --- Exemplos de grid-template-columns --- */
.container-fixed {
grid-template-columns: 100px 200px 150px; /* 3 colunas com larguras fixas */
}
.container-fr {
grid-template-columns: 1fr 1fr 1fr; /* 3 colunas de largura igual */
}
.container-fr-ratio {
grid-template-columns: 1fr 2fr 0.5fr; /* 3 colunas com proporções diferentes */
}
.container-mixed {
grid-template-columns: 100px 1fr auto; /* Fixo, flexível, auto-ajustável */
}
.container-minmax {
grid-template-columns: minmax(100px, 200px) 1fr; /* Coluna 1 entre 100px e 200px, Coluna 2 flexível */
}
.container-content {
grid-template-columns: min-content max-content 1fr; /* Min-content, Max-content, flexível */
}
</style>
</head>
<body>
<h1>Propriedade `grid-template-columns`</h1>
<h2>Colunas com Larguras Fixas (`100px 200px 150px`)</h2>
<div class="grid-container container-fixed">
<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>
<h2>Colunas com `fr` (Fração Igual: `1fr 1fr 1fr`)</h2>
<div class="grid-container container-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>
<h2>Colunas com `fr` (Proporções Diferentes: `1fr 2fr 0.5fr`)</h2>
<div class="grid-container container-fr-ratio">
<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>
<h2>Colunas Mistas (`100px 1fr auto`)</h2>
<div class="grid-container container-mixed">
<div class="grid-item">Item Fixo</div>
<div class="grid-item">Item Flexível</div>
<div class="grid-item">Item Auto Ajuste com Conteúdo Longo</div>
<div class="grid-item">Outro Fixo</div>
<div class="grid-item">Outro Flexível</div>
<div class="grid-item">Outro Auto</div>
</div>
<h2>Colunas com `minmax(min, max)` (`minmax(100px, 200px) 1fr`)</h2>
<div class="grid-container container-minmax">
<div class="grid-item">Item MinMax</div>
<div class="grid-item">Item Flexível</div>
<div class="grid-item">Outro MinMax</div>
<div class="grid-item">Outro Flexível</div>
</div>
<h2>Colunas com `min-content` e `max-content` (`min-content max-content 1fr`)</h2>
<div class="grid-container container-content">
<div class="grid-item">Pequeno</div>
<div class="grid-item">Conteúdo Muito Longo Que Não Quebra</div>
<div class="grid-item">Flexível</div>
<div class="grid-item">Pequeno 2</div>
<div class="grid-item">Outro Conteúdo Muito Longo Que Não Quebra</div>
<div class="grid-item">Flexível 2</div>
</div>
</body>
</html>
Resultado:
- Você verá vários contêineres grid, cada um demonstrando um tipo diferente de definição de coluna.
- Observe como as colunas se adaptam ou mantêm seu tamanho de acordo com os valores de
grid-template-columns. - Redimensione a janela do navegador para ver o efeito das unidades
freminmaxna responsividade.
Boas Práticas:
- Sempre defina suas colunas: Depois de
display: grid;,grid-template-columnsé geralmente a próxima propriedade a ser definida para estruturar seu layout. - Use
frpara flexibilidade: A unidadefré a melhor amiga da responsividade no Grid. Ela garante que suas colunas se adaptem ao espaço disponível. - Combine unidades: Não tenha medo de misturar unidades fixas (px), porcentagens e
frpara criar layouts complexos e flexíveis. minmax()para controle: Useminmax()para garantir que suas colunas não fiquem nem muito pequenas nem muito grandes, oferecendo um controle responsivo robusto.- Visualização: Use as ferramentas de desenvolvedor do navegador para visualizar as linhas de grade e os tamanhos das colunas. Isso é crucial para entender e depurar seu layout.
Dominar grid-template-columns é o primeiro passo para desenhar a estrutura horizontal do seu layout Grid. Nas próximas lições, você aprenderá a definir as linhas e a usar atalhos.