https://jsfiddle.net/vhem8scs/
É possível alinhar dois itens à esquerda e um item à direita com o flexbox? O link mostra mais claramente. O último exemplo é o que eu quero alcançar.
No flexbox, tenho um bloco de código. Com float, tenho quatro blocos de código. Essa é uma das razões pelas quais eu prefiro o flexbox.
HTML
<div class="wrap">
<div>One</div>
<div>Two</div>
<div>Three</div>
</div>
<!-- DESIRED RESULT -->
<div class="result">
<div>One</div>
<div>Two</div>
<div>Three</div>
</div>
CSS
.wrap {
display: flex;
background: #ccc;
width: 100%;
justify-content: space-between;
}
.result {
background: #ccc;
margin-top: 20px;
}
.result:after {
content: '';
display: table;
clear: both;
}
.result div {
float: left;
}
.result div:last-child {
float: right;
}
Respostas:
Para alinhar um filho flex à direita, configure-o com
margin-left: auto;
A partir da especificação flex :
Violino atualizado
Mostrar snippet de código
Nota:
Você pode obter um efeito semelhante definindo flex-grow: 1 no item flex do meio (ou taquigrafia
flex:1
), que empurraria o último item para a direita. ( Demo )A diferença óbvia, porém, é que o item do meio se torna maior do que o necessário. Adicione uma borda aos itens flexíveis para ver a diferença.
Demo
Mostrar snippet de código
fonte
auto
margem usa o espaço vazio no contêiner para separar os itens flex. A propriedadeflex-grow
/flex
pega esse espaço vazio, fornece-o ao item flexível, que se expande por esse valor. Conforme mencionado por Danield, o último método aumenta o item flexível DOIS maior, o que você pode não querer.div:nth-last-child(4) { margin-left: auto }
codepen.io/danield770/pen/ERyoarPara uma opção flexbox pura e concisa, agrupe os itens alinhados à esquerda e alinhados à direita:
e use
space-between
:Dessa forma, você pode agrupar vários itens à direita (ou apenas um).
https://jsfiddle.net/c9mkewwv/3/
fonte
display: inline;
ordisplay: inline-block;
, então eles empilhados em vez de todos em uma fileira, como o flexbox, caso contrário os teriam.One
eTwo
dediv
s paraspan
s - se aindadisplay: block;
estivessem, fluiriam para linhas separadas. Como o OP originalmente tinhadiv
s, eu só queria salientar que simplesmente colocá-los dentro de outrodiv
não funcionaria sem alterar a exibição das tags originais.display: flex
não estão mais influenciando seu layout. Se você quiser usar div, sim,inline
ouinline-block
funcionaria. Mas também, obviamente,flex
já que o estamos usando como padrãoflex-direction: row
com as divs já. ex. jsfiddle.net/ynbb5964/2Para alinhar alguns elementos (headerElement) no centro e o último elemento à direita (headerEnd).
fonte