Чтобы выровнять одного гибкого ребенка вправо, установите егоmargin-left: auto;
Из спецификации Flex :
Одно из применений автоматических полей на главной оси - разделение гибких элементов на отдельные «группы». В следующем примере показано, как использовать это для воспроизведения общего шаблона пользовательского интерфейса - одной панели действий, некоторые из которых выровнены по левому краю, а другие по правому краю.
.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>
Примечание:
Вы можете добиться аналогичного эффекта, установив flex-grow: 1 на средний элемент Flex (или сокращение flex:1
), который будет толкать последний элемент полностью вправо. ( Демо )
Однако очевидное различие заключается в том, что средний элемент становится больше, чем может потребоваться. Добавьте границу к гибким элементам, чтобы увидеть разницу.
.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>