Tekst zostanie umieszczony pośrodku, a przycisk zostanie umieszczony między tekstem a dolnym przyciskiem.
Można użyć kombinacji auto
margins z niewidzialnego elastycznego elementu do osiągnięcia układ:
(Edit. Napisałem tę odpowiedź, zanim sprawa została zaktualizowana z przykładowym kodem Więc mój kod jest inny niż w pytanie. Ale nadal ma zastosowanie metoda.)
html, body {
height: 100%;
margin: 0;
}
.container {
display: flex;
flex-direction: column;
align-items: center;
height: 100%;
box-sizing: border-box;
}
.container > div:nth-child(1) { margin-top: auto; visibility: hidden; }
.container > div:nth-child(2) { margin-top: auto; }
.container > div:nth-child(3) { margin-top: auto; margin-bottom: auto; }
/* non-essential decorative styles */
.container {
background-color: yellow;
}
.box {
height: 50px;
width: 150px;
background-color: lightgreen;
display: flex;
justify-content: center;
align-items: center;
font-size: 1.2em;
box-sizing: border-box;
}
<div class="container">
<div class="box">BUTTON</div><!-- invisible flex item -->
<div class="box">SUPERMAN</div>
<div class="box">BUTTON</div>
</div>
jsFiddle
Ponadto, z dwoma niewielkimi zmianami, dolny element może być równo z krawędzią.
.container > div:nth-child(1) { /* margin-top: auto; */ visibility: hidden; }
.container > div:nth-child(2) { margin-top: auto; }
.container > div:nth-child(3) { margin-top: auto; /* margin-bottom: auto; */ }
jsFiddle
OR, wystarczy użyć justify-content: space-between
:
.container > div:nth-child(1) { visibility: hidden; }
/* .container > div:nth-child(2) { margin-top: auto; } */
/* .container > div:nth-child(3) { margin-top: auto; } */
.container {
display: flex;
flex-direction: column;
align-items: center;
background-color: yellow;
height: 100%;
box-sizing: border-box;
justify-content: space-between; /* NEW */
}
jsFiddle
Więcej opcji wyrównania patrz: Methods for Aligning Flex Items
@Michael_B Dzięki stary, to również wydaje się dobrym podejściem. Przetestuję to później jeszcze dziś! – allegutta