CSS выравнивает один элемент справа с помощью flexbox
https://jsfiddle.net/vhem8scs/
можно ли иметь два элемента и один элемент выровнять по левому краю выровнять по правому краю с элемента? Ссылка показывает это более четко. Последний пример - это то, чего я хочу достичь.
в flexbox у меня есть один блок кода. С float у меня есть четыре блока кода. Это одна из причин, почему я предпочитаю 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;
}
2 ответа:
чтобы выровнять один ребенок flex вправо, установите его с
margin-left: auto;
С flex spec:
одна польза автоматических полей в главной оси отделить детали гибкого трубопровода в отдельные "группы". В следующем примере показано, как использовать это воспроизвести общий шаблон пользовательского интерфейса-одну панель действий с некоторыми выравнивание по левому краю и другим выровнен по правому.
.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
), который будет толкать последний элемент полностью вправо. (демо)очевидная разница, однако, заключается в том, что средний элемент становится больше, чем это может быть необходимо. Добавьте границу к элементам flex, чтобы увидеть разница.
демо
.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>
для краткого, чистого варианта flexbox, сгруппируйте выровненные по левому краю элементы и выровненные по правому краю элементы:
<div class="wrap"> <div> <span>One</span> <span>Two</span> </div> <div>Three</div> </div>
и использовать
space-between
:.wrap { display: flex; background: #ccc; justify-content: space-between; }
таким образом, вы можете сгруппировать несколько элементов справа(или только один).