Esta questão se refere a um navegador com suporte total a CSS3, incluindo flexbox.
Eu tenho um contêiner flexível com alguns itens nele. Eles são todos justificados para flex-start, mas quero que o último .end
item seja justificado para flex-end. Existe uma boa maneira de fazer isso sem modificar o HTML e sem recorrer ao posicionamento absoluto?
.container {
display: flex;
flex-direction: column;
outline: 1px solid green;
min-height: 400px;
width: 100px;
justify-content: flex-start;
}
p {
height: 50px;
background-color: blue;
margin: 5px;
}
<div class="container">
<p></p>
<p></p>
<p></p>
<p class="end"></p>
</div>
auto
ilustrações de margem aqui: stackoverflow.com/a/33856609/3597276Respostas:
Portanto, você pode usar
margin-top: auto
para distribuir o espaço entre os outros elementos e o último elemento.Isso posicionará o último elemento na parte inferior.
p:last-of-type { margin-top: auto; }
Exibir trecho de código
.container { display: flex; flex-direction: column; border: 1px solid #000; min-height: 200px; width: 100px; } p { height: 30px; background-color: blue; margin: 5px; } p:last-of-type { margin-top: auto; }
<div class="container"> <p></p> <p></p> <p></p> </div>
Da mesma forma, você também pode usar
margin-left: auto
oumargin-right: auto
para o mesmo alinhamento horizontal.p:last-of-type { margin-left: auto; }
Exibir trecho de código
.container { display: flex; width: 100%; border: 1px solid #000; } p { height: 50px; width: 50px; background-color: blue; margin: 5px; } p:last-of-type { margin-left: auto; }
<div class="container"> <p></p> <p></p> <p></p> <p></p> </div>
fonte
margin: 0 auto
para centralização horizontal. Os itens flexbox respeitam a margem, e acredito quemargin: auto
basicamente posicionarão o item com o máximo de espaço possível entre o irmão. Consulte: w3.org/TR/css-flexbox-1/#auto-marginsmargin: auto
em um item flexível diz para criar o máximo de espaço possível nessa direção.Prior to alignment via justify-content and align-self, any positive free space is distributed to auto margins in that dimension.
Este princípio do flexbox também funciona horizontalmente
Durante os cálculos de bases flexíveis e comprimentos flexíveis, as margens automáticas são tratadas como 0.
Antes do alinhamento via justify-content e align-self, qualquer espaço livre positivo é distribuído para as margens automáticas naquela dimensão.
Definir uma margem esquerda automática para o último item fará o trabalho.
.last-item { margin-left: auto; }
Exemplo de código:
.container { display: flex; width: 400px; outline: 1px solid black; } p { height: 50px; width: 50px; margin: 5px; background-color: blue; } .last-item { margin-left: auto; }
<div class="container"> <p></p> <p></p> <p></p> <p class="last-item"></p> </div>
Snippet de Codepen
Isso pode ser muito útil para rodapés de área de trabalho.
Como a Envato fez aqui com o logotipo da empresa.
Snippet de Codepen
fonte