我一直在试图从一个桌子布局到更现代的东西。我有一个布局,需要一个“固定”的页眉和一个粘性的页脚。为了实现这个目标,我决定稍微改变页面的工作方式,而不是让整个页面滚动,我创建了一个滚动div作为body/footer区域。这将使页眉保持在动态高度的顶部,同时模拟典型页面的滚动方式。
但是,我在flexbox和grid中遇到了相同的问题。只要我没有任何基于百分比的子元素,布局就可以工作。如果有,则flexbox将根据子级调整大小。例如,如果其中一个子级中div的高度设置为100%,则它将显示div,但溢出后的任何其他内容和页脚都将显示在不适当的位置。这似乎有点违反直觉,我希望有人能解释背后的设计选择?是否有任何解决方法允许这种功能?
我基本上认为flexbox系统可以填充剩余的空间(用于身体),但也可以根据需要扩展以包围所有的孩子。
我写了一个简单的例子来说明我在说什么。请看下面,谢谢!
编辑:
这似乎只发生在Firefox和Edge上,而不是Chrome上。
html, body {
height: 100%;
width: 100%;
margin: 0;
padding: 0;
}
.container {
display: inline-block;
height: 100%;
width: 50%;
max-height: 100%;
overflow: auto;
}
.bg {
background-color: gray;
}
.span {
width: 100%;
height: 100%;
}
.flex {
display: flex;
flex-direction: column;
min-height: 100%;
}
.flex > .main {
flex: 1;
}
<div class="container">
<div class="flex">
<div class="main">
<ul>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
</ul>
</div>
<footer>
This should be a sticky footer
</footer>
</div>
</div><div class="container">
<div class="flex">
<div class="main">
<div class="bg span">
This breaks the page
</div>
<ul>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
<li>This is a spacer</li>
</ul>
</div>
<footer>
This should be a sticky footer
</footer>
</div>
</div>