https://jsfiddle.net/vhem8scs/
Czy możliwe jest, aby dwa elementy były wyrównane do lewej, a jeden do prawej z Flexbox? Link pokazuje to wyraźniej. Ostatni przykład jest tym, co chcę osiągnąć.
W Flexbox mam jeden blok kodu. Z float mam cztery bloki kodu. To jeden z powodów, dla których wolę 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;
}
Odpowiedzi:
Aby wyrównać jedno elastyczne dziecko w prawo, ustaw je za pomocą
margin-left: auto;
Z specyfikacji Flex :
Zaktualizowano skrzypce
Pokaż fragment kodu
Uwaga:
Możesz osiągnąć podobny efekt, ustawiając Flex-Grow: 1 na środkowym elemencie Flex (lub stenografii
flex:1
), który popychałby ostatni przedmiot do końca w prawo. ( Demo )Oczywista różnica polega jednak na tym, że środkowy element staje się większy, niż może być. Dodaj ramkę do elementów elastycznych, aby zobaczyć różnicę.
Próbny
Pokaż fragment kodu
źródło
auto
margines wykorzystuje puste miejsce w pojemniku do oddzielenia elementów elastycznych. Właściwośćflex-grow
/flex
zajmuje puste miejsce i nadaje elementowi flex, który rozszerza się o tę kwotę. Jak wspomniała Danield, ta ostatnia metoda powoduje, że element Flex DRUGI jest większy, czego możesz nie chcieć.div:nth-last-child(4) { margin-left: auto }
codepen.io/danield770/pen/ERyoarAby uzyskać zwięzłą, czystą opcję Flexbox, zgrupuj elementy wyrównane do lewej i elementy wyrównane do prawej:
i użyj
space-between
:W ten sposób możesz grupować wiele elementów po prawej stronie (lub tylko jeden).
https://jsfiddle.net/c9mkewwv/3/
źródło
display: inline;
lubdisplay: inline-block;
, wówczas zostaną one ułożone w stos zamiast wszystkich w rzędzie, takich jak Flexbox, w przeciwnym razie miałyby je.One
iTwo
oddiv
s dospan
s - jeśli nadaldisplay: block;
byłyby, to popłynęłyby do oddzielnych linii. Ponieważ OP miał początkowodiv
s, chciałem tylko zaznaczyć, że po prostu umieszczenie ich w innymdiv
nie działałoby bez zmiany wyświetlania oryginalnych tagów.display: flex
nie mają już wpływu na ich układ. Jeśli chcesz użyć div, tak,inline
lubinline-block
zadziała. Ale oczywiście,flex
ponieważ używamy go już jako domyślnegoflex-direction: row
z rodzicielskim divem. dawny. jsfiddle.net/ynbb5964/2Aby wyrównać niektóre elementy (headerElement) na środku i ostatni element po prawej stronie (headerEnd).
źródło