这是我多次遇到的问题,因此我想这一次将寻求一个明确的答案。我想做的是,使一个元素垂直居中,同时让另一个元素充当“页脚”,并捕捉到同一容器的底部。像这样:
问题在于页脚将具有动态高度。预期的行为是,如果有足够的空间,则中间元素将保持垂直居中;如果页脚太大而无法实现,则居中内容将向上移动,为页脚腾出空间。
我找到的最接近的解决方案是在this question中。但是,就像我看到的所有其他解决方案一样,它需要知道页脚的高度。
我有一种直觉,认为这与flexbox是不可能的。我最终得到的解决方案始终是经典的position: relative
包装器,在页脚处带有position: absolute
。
Here's a demo fiddle,如果您想看看我上次尝试的失败之处。
flex-container {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
border: 4px solid blue;
height: 300px;
width: 300px;
}
flex-container>flex-spacer {
margin-top: auto;
visibility: hidden;
}
flex-container>flex-item {
display: flex;
}
flex-container>flex-footer {
margin-top: auto;
margin-bottom: auto;
}
flex-container>flex-spacer,
flex-container>flex-footer {
border: 4px solid chartreuse;
}
flex-container>flex-item>flex-item {
border: 4px solid aqua;
height: 50px;
width: 50px;
margin: 0 5px;
}
<flex-container>
<flex-spacer></flex-spacer>
<flex-item>
<flex-item></flex-item>
<flex-item></flex-item>
<flex-item></flex-item>
</flex-item>
<flex-footer>
this is the footer element<br /> this is the footer element<br />
</flex-footer>
</flex-container>
答案 0 :(得分:0)
您需要的是一个用于整个容器的flexbox,以及一个用于内容本身的嵌套flexbox。这样一来,您就可以应用两种不同的对齐规则,同时保持flexbox广为人知的“灵活性”。
您的其他一些元素(例如“间隔符”)是不必要的。
flex-container {
display: flex;
flex-direction:column;
align-items: center;
justify-content:flex-end;
border: 4px solid blue;
height: 300px;
width: 300px;
}
flex-container > flex-center-content {
display:flex;
height:100%;
width:100%;
align-items:center;
justify-content:center;
}
flex-container > flex-footer {
border: 4px solid chartreuse;
}
flex-container > flex-center-content > flex-item {
border: 4px solid aqua;
height: 50px;
width: 50px;
margin: 0 5px;
}
<flex-container>
<flex-center-content>
<flex-item></flex-item>
<flex-item></flex-item>
<flex-item></flex-item>
</flex-center-content>
<flex-footer>
this is the footer element<br />
this is the footer element<br />
this is footeeeeer<br>
look how tall I am<br>
and how much I push things<br>
</flex-footer>
</flex-container>