Para alinear un hijo flexible a la derecha, configúrelo conmargin-left: auto;
De la especificación flex :
Un uso de los márgenes automáticos en el eje principal es separar los elementos flexibles en distintos "grupos". El siguiente ejemplo muestra cómo usar esto para reproducir un patrón de interfaz de usuario común: una sola barra de acciones con algunas alineadas a la izquierda y otras alineadas a la derecha.
.wrap div:last-child {
margin-left: auto;
}
.wrap {
display: flex;
background: #ccc;
width: 100%;
justify-content: space-between;
}
.wrap div:last-child {
margin-left: auto;
}
.result {
background: #ccc;
margin-top: 20px;
}
.result:after {
content: '';
display: table;
clear: both;
}
.result div {
float: left;
}
.result div:last-child {
float: right;
}
<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>
Nota:
Puede lograr un efecto similar estableciendo flex-grow: 1 en el elemento flex del medio (o taquigrafía flex:1
) que empujaría el último elemento completamente hacia la derecha. ( Demo )
Sin embargo, la diferencia obvia es que el elemento central se hace más grande de lo que podría ser necesario. Agregue un borde a los elementos flexibles para ver la diferencia.
.wrap {
display: flex;
background: #ccc;
width: 100%;
justify-content: space-between;
}
.wrap div {
border: 3px solid tomato;
}
.margin div:last-child {
margin-left: auto;
}
.grow div:nth-child(2) {
flex: 1;
}
.result {
background: #ccc;
margin-top: 20px;
}
.result:after {
content: '';
display: table;
clear: both;
}
.result div {
float: left;
}
.result div:last-child {
float: right;
}
<div class="wrap margin">
<div>One</div>
<div>Two</div>
<div>Three</div>
</div>
<div class="wrap grow">
<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>