我有一个应用程序,它本质上是页眉,主要内容和始终可见的页脚。页脚可以更改大小,我想在页脚上方的主要内容面板上放置一些工具。主要布局是使用flex完成的,我在阅读文档时的理解是,绝对定位通过相对于最近的后代进行定位而与flex布局相结合,但这并不是我的经验。希望有人可以在这里帮助我。
在下面的代码示例中,我希望看到“底部” div位于页脚上方,但实际上它位于窗口的底部。 这是jsfiddle链接:http://jsfiddle.net/L809zbey/
HTML:
<div class="flex">
<div class="header">Sweet header</div>
<div class="content">Main content
<div class="bottom">
This guy should be fixed above the footer.
</div>
</div>
<div class="footer">Equally sweet footer</div>
</div>
CSS:
.flex{
border: 1px solid #ddd;
font: 14px Arial;
display: flex;
flex-direction: column;
}
.header{
background : #007AA2;
flex: 0 0 auto;
}
.content{
background : #FFF;
flex: 1 1 auto;
height: 200px;
}
.footer{
background : #7FCADE;
flex: 0 0 auto;
}
.bottom {
position: absolute;
bottom: 20px;
}
答案 0 :(得分:2)
尝试将position:relative;
添加到您的.flex
类中。 .bottom
元素当前是相对于正文的,因此为何将其固定在页面底部。
答案 1 :(得分:0)
您需要将position: relative;
添加到.flex
。绝对定位的事物将相对于最近定位的祖先进行定位。如果不存在,它将相对于身体
答案 2 :(得分:0)
您不需要完全定位元素 ...只需确保其始终位于.content
div的底部即可。这样,它就不会覆盖任何具有绝对位置的实际内容。
您可以通过将.content
div设为flex-column并应用margin-top:auto
您的工具div来实现此目的。
.flex {
border: 1px solid #ddd;
font: 14px Arial;
display: flex;
flex-direction: column;
}
.header {
background: #007AA2;
flex: 0 0 auto;
}
.content {
background: pink;
flex: 1;
display: flex;
flex-direction: column;
height: 200px;
}
.footer {
background: #7FCADE;
flex: 0 0 auto;
}
.bottom {
margin-top: auto;
background: orange;
}
<div class="flex">
<div class="header">Sweet header</div>
<div class="content">Main content
<div class="bottom">
This guy should be fixed above the footer.
</div>
</div>
<div class="footer">Equally sweet footer</div>
</div>