Propriedade align-self: Alinhando um item individualmente
Sobrescreva o alinhamento de um item específico no eixo cruzado.
Você já aprendeu que a propriedade align-items (aplicada ao Contêiner Flex) alinha todos os Itens Flex ao longo do eixo cruzado. Mas e se você quiser que apenas um item específico tenha um alinhamento diferente dos outros? É para isso que serve a propriedade align-self.
A propriedade align-self é aplicada diretamente a um Item Flex individual e permite que ele sobrescreva o valor de align-items definido no seu Contêiner Flex.
Pense no align-self como um "pedido especial" de um músico (flex-item) para o diretor da orquestra (flex-container). O diretor pode ter dito para todos os músicos ficarem em uma certa posição (align-items), mas um músico específico pode pedir para se posicionar de forma diferente (align-self), e seu pedido será atendido.
Como funciona align-self
- Aplicado ao Item Flex:
align-selfé uma propriedade de Item Flex. - Sobrescreve
align-items: O valor dealign-selfem um item individual tem prioridade sobre o valor dealign-itemsdefinido no Contêiner Flex. - Valores:
align-selfaceita os mesmos valores quealign-items:auto(padrão): O item herda o valor dealign-itemsdo seu pai. Se o pai não tiveralign-itemsdefinido, o padrão éstretch.stretch: O item é "esticado" para preencher todo o espaço disponível ao longo do eixo cruzado.flex-start: O item é agrupado no início do eixo cruzado.flex-end: O item é agrupado no fim do eixo cruzado.center: O item é agrupado no centro do eixo cruzado.baseline: O item é alinhado com base em sua linha de base de texto.
Exemplo Prático:
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<title>Propriedade Align-self</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 20px;
background-color: #f4f4f4;
}
.flex-container {
display: flex;
background-color: #e0e0e0;
border: 2px solid #333;
padding: 10px;
height: 200px; /* Altura fixa para o contêiner para ver o alinhamento vertical */
margin-bottom: 20px;
align-items: flex-start; /* align-items padrão para o contêiner */
}
.flex-item {
background-color: lightblue;
border: 1px solid blue;
padding: 15px;
margin: 5px;
color: #333;
font-weight: bold;
text-align: center;
width: 80px; /* Largura fixa para os itens */
height: 60px; /* Altura fixa para os itens */
line-height: 60px; /* Para centralizar texto verticalmente */
}
/* --- Exemplos de align-self --- */
.self-stretch {
align-self: stretch; /* Sobrescreve align-items: flex-start */
height: auto; /* Para permitir o stretch */
background-color: lightcoral;
}
.self-center {
align-self: center; /* Sobrescreve align-items: flex-start */
background-color: lightgreen;
}
.self-end {
align-self: flex-end; /* Sobrescreve align-items: flex-start */
background-color: lightgoldenrodyellow;
}
.self-baseline {
align-self: baseline; /* Sobrescreve align-items: flex-start */
background-color: lightsalmon;
font-size: 1.5em; /* Para demonstrar o baseline */
line-height: 1.2;
}
/* Exemplo com flex-direction: column */
.container-column {
flex-direction: column;
width: 300px; /* Largura fixa para o contêiner */
height: 300px;
align-items: flex-start; /* align-items padrão para o contêiner */
}
.container-column .flex-item {
height: 80px;
width: 60px;
line-height: 80px;
}
.container-column .self-center {
align-self: center; /* Centraliza horizontalmente */
}
</style>
</head>
<body>
<h1>Propriedade `align-self`</h1>
<h2>Contêiner com `align-items: flex-start`</h2>
<div class="flex-container">
<div class="flex-item">Item Padrão</div>
<div class="flex-item self-stretch">Item Stretch</div>
<div class="flex-item self-center">Item Center</div>
<div class="flex-item self-end">Item End</div>
<div class="flex-item self-baseline">Item Baseline</div>
</div>
<p>Observe como cada item com `align-self` sobrescreve o `align-items: flex-start` do contêiner.</p>
<h2>Contêiner com `flex-direction: column` e `align-items: flex-start`</h2>
<div class="flex-container container-column">
<div class="flex-item">Item Padrão</div>
<div class="flex-item self-center">Item Center</div>
<div class="flex-item">Outro Item</div>
</div>
<p>Aqui, `align-self: center` centraliza o item horizontalmente, pois o eixo cruzado é horizontal.</p>
</body>
</html>
Resultado:
- Você verá que, apesar do Contêiner Flex ter
align-items: flex-start;, os itens comalign-selfaplicado se alinharão de forma diferente, de acordo com o valor dealign-self. - Observe como
align-self: stretch;faz o item preencher a altura (ou largura, seflex-direction: column;) disponível. - Veja como
align-self: baseline;alinha o texto do item, não a caixa.
Boas Práticas:
- Sobrescrita Individual: Use
align-selfquando você precisa de um alinhamento específico para um ou alguns itens, sem afetar o comportamento geral definido poralign-itemsno contêiner. - Consistência: Evite usar
align-selfem todos os itens se o objetivo é um alinhamento uniforme. Nesses casos, é melhor usaralign-itemsno contêiner. - Eixo Cruzado: Lembre-se que
align-self(assim comoalign-items) opera no eixo cruzado. Seflex-direction: row;, ele alinha verticalmente. Seflex-direction: column;, ele alinha horizontalmente. auto: O valorautoé útil se você quiser que um item siga oalign-itemsdo pai, mas em algum momento você pode querer sobrescrevê-lo.
Dominar align-self adiciona uma camada extra de controle ao seu arsenal Flexbox, permitindo ajustes finos no alinhamento de itens individuais para layouts mais complexos e personalizados.