Propriedades justify-items, align-items, place-items: Alinhando itens dentro das células
Controle o alinhamento dos itens grid dentro de suas respectivas células.
Você já sabe como posicionar seus Itens Grid em células específicas e como definir o tamanho dessas células. Mas e se o Item Grid for menor que a célula que ele ocupa? Como você controla o alinhamento desse item dentro da célula?
É para isso que servem as propriedades justify-items, align-items e place-items. Elas são aplicadas ao Contêiner Grid e controlam o alinhamento de todos os Itens Grid dentro de suas respectivas células.
Pense nisso como organizar um objeto dentro de uma caixa. A caixa (célula) pode ser maior que o objeto (Item Grid). Você pode querer que o objeto fique no centro da caixa, no canto superior esquerdo, ou esticado para preencher a caixa.
Entendendo os Eixos de Alinhamento
No CSS Grid, o alinhamento ocorre em dois eixos dentro de cada célula:
- Eixo da Linha (Inline/Horizontal): Controlado por
justify-items. Alinha o Item Grid horizontalmente dentro da célula. - Eixo da Coluna (Block/Vertical): Controlado por
align-items. Alinha o Item Grid verticalmente dentro da célula.
Propriedades de Alinhamento de Itens
1. justify-items (Eixo da Linha/Horizontal)
Aplicado ao Contêiner Grid. Define o alinhamento padrão de todos os Itens Grid ao longo do eixo da linha (horizontal) dentro de suas células.
Valores:
stretch(padrão): O Item Grid se estica para preencher toda a largura da célula.start: O Item Grid é alinhado ao início da célula (esquerda emltr).end: O Item Grid é alinhado ao fim da célula (direita emltr).center: O Item Grid é centralizado horizontalmente na célula.
2. align-items (Eixo da Coluna/Vertical)
Aplicado ao Contêiner Grid. Define o alinhamento padrão de todos os Itens Grid ao longo do eixo da coluna (vertical) dentro de suas células.
Valores:
stretch(padrão): O Item Grid se estica para preencher toda a altura da célula.start: O Item Grid é alinhado ao início da célula (topo).end: O Item Grid é alinhado ao fim da célula (base).center: O Item Grid é centralizado verticalmente na célula.baseline: Alinha os itens com base em sua linha de base de texto.
3. place-items (Shorthand para align-items e justify-items)
Aplicado ao Contêiner Grid. É um shorthand para definir align-items e justify-items em uma única propriedade.
Sintaxe:
.grid-container {
place-items: <align-items-valor> <justify-items-valor>;
}
Exemplos:
place-items: center;- Equivalente a:
align-items: center; justify-items: center; - Centraliza os itens tanto vertical quanto horizontalmente dentro de suas células.
- Equivalente a:
place-items: start end;- Equivalente a:
align-items: start; justify-items: end; - Alinha os itens ao topo e à direita de suas células.
- Equivalente a:
justify-self e align-self: Alinhamento Individual
Assim como no Flexbox com align-self, o Grid também tem propriedades para sobrescrever o alinhamento de itens individuais:
justify-self: Aplicado ao Item Grid. Sobrescrevejustify-itemspara um item específico.align-self: Aplicado ao Item Grid. Sobrescrevealign-itemspara um item específico.
Essas propriedades aceitam os mesmos valores (stretch, start, end, center, baseline).
Exemplo Prático:
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<title>Alinhando Itens Grid dentro das Células</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 20px;
background-color: #f4f4f4;
}
.grid-container {
display: grid;
grid-template-columns: repeat(3, 150px); /* 3 colunas fixas */
grid-template-rows: repeat(2, 100px); /* 2 linhas fixas */
gap: 10px;
background-color: #e0e0e0;
border: 2px solid #333;
padding: 10px;
width: fit-content; /* Ajusta a largura ao conteúdo */
margin: 0 auto 30px auto;
}
.grid-item {
background-color: lightblue;
border: 1px solid blue;
padding: 15px;
color: #333;
font-weight: bold;
/* Remove o display: flex para que o item não preencha a célula por padrão */
/* e possamos ver o efeito do alinhamento */
/* display: flex; */
/* justify-content: center; */
/* align-items: center; */
width: 80px; /* Largura menor que a célula */
height: 40px; /* Altura menor que a célula */
}
/* --- Exemplos de alinhamento --- */
.container-stretch {
/* Padrão: stretch stretch */
}
.container-center {
justify-items: center;
align-items: center;
background-color: lightcoral;
}
.container-start-end {
justify-items: start;
align-items: end;
background-color: lightgreen;
}
.container-place-items {
place-items: end center; /* align-items: end; justify-items: center; */
background-color: lightgoldenrodyellow;
}
/* Exemplo de alinhamento individual */
.container-individual .item-override {
background-color: lightsalmon;
justify-self: end; /* Sobrescreve o justify-items do contêiner */
align-self: start; /* Sobrescreve o align-items do contêiner */
}
</style>
</head>
<body>
<h1>Alinhando Itens Grid dentro das Células</h1>
<h2>Padrão: `stretch` (itens preenchem a célula)</h2>
<div class="grid-container container-stretch">
<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>`justify-items: center; align-items: center;` (Centralizado)</h2>
<div class="grid-container container-center">
<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>`justify-items: start; align-items: end;` (Topo Esquerdo)</h2>
<div class="grid-container container-start-end">
<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>`place-items: end center;` (Shorthand: Base Centralizado)</h2>
<div class="grid-container container-place-items">
<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>Alinhamento Individual com `justify-self` e `align-self`</h2>
<div class="grid-container container-individual">
<div class="grid-item">Item 1 (Padrão)</div>
<div class="grid-item item-override">Item 2 (Individual)</div>
<div class="grid-item">Item 3 (Padrão)</div>
<div class="grid-item item-override">Item 4 (Individual)</div>
<div class="grid-item">Item 5 (Padrão)</div>
<div class="grid-item item-override">Item 6 (Individual)</div>
</div>
<p>No último exemplo, o contêiner não tem alinhamento explícito, então o padrão é `stretch`. Mas os itens com a classe `item-override` sobrescrevem esse comportamento.</p>
</body>
</html>
Resultado:
- Você verá vários contêineres grid, cada um demonstrando um tipo diferente de alinhamento dos itens dentro de suas células.
- Observe como os itens se movem dentro de suas células de acordo com as propriedades aplicadas ao contêiner ou individualmente.
Boas Práticas:
stretché o padrão: Lembre-se que o comportamento padrão éstretch, o que significa que os itens tentarão preencher a célula. Se você quer ver o efeito destart,endoucenter, certifique-se de que o Item Grid seja menor que a célula (ex: definindowidtheheightfixos para o item).- Contêiner vs. Item:
justify-items,align-items,place-itemssão para o Contêiner Grid (afetam todos os filhos).justify-selfealign-selfsão para o Item Grid (afetam um item específico). - Shorthand
place-items: Useplace-itemspara concisão quandoalign-itemsejustify-itemstiverem os mesmos valores ou quando você quiser defini-los juntos. - Alinhamento Individual: Use
justify-selfealign-selfquando precisar de um "pedido especial" para um item que deve se comportar de forma diferente dos outros.
Dominar essas propriedades de alinhamento é crucial para ter controle total sobre a aparência dos seus layouts Grid, garantindo que seus elementos estejam sempre onde você deseja, mesmo quando o espaço varia.