首页 > 解决方案 > 仅使用 flexbox 固定页眉、可滚动内容和固定页脚布局

问题描述

我正在尝试使用 flex 创建一个 HEADER、可滚动的 CONTENT 和 FOOTER 结构:

.container {
  display: flex;
  flex-direction: column;
  height: 100%;
  width: 400px;
  background-color: white;
  border: 1px solid black;
  text-align: center;
  border-collapse: collapse;
  overflow-y: hidden;
}

.header {
  justify-self: flex-start;
  background-color: #cdcdcd;
  padding: 8px;
}

.content {
  border: 1px solid black;
  padding: 8px;
  overflow-y: scroll;
}

.footer {
  justify-self: flex-end;
  background-color: #cdcdcd;
  padding: 8px;
}
<div class="container">
  <div class="header">Header</div>
  <div class="content">
    <p>Very tall content</p>
    <p>Very tall content</p>
    <p>Very tall content</p>
    <p>Very tall content</p>
    <p>Very tall content</p>
    <p>Very tall content</p>
    <p>Very tall content</p>
    <p>Very tall content</p>
    <p>Very tall content</p>
    <p>Very tall content</p>
    <p>Very tall content</p>
    <p>Very tall content</p>
    <p>Very tall content</p>
    <p>Very tall content</p>
    <p>Very tall content</p>
    <p>Very tall content</p>
    <p>Very tall content</p>
    <p>Very tall content</p>
    <p>Very tall content</p>
    <p>Very tall content</p>
    <p>Very tall content</p>
    <p>Very tall content</p>
    <p>Very tall content</p>
  </div>

  <div class="footer">
    Footer
  </div>
</div>

我无法避免整个屏幕滚动,不仅是内容。我需要页眉和页脚保持固定在其位置(分别为顶部和底部)并仅滚动内容(仅内容上的垂直滚动条)。

标签: htmlcss

解决方案


添加flex: 1 1 auto;height: 0px;将使.content滚动。

但是,由于 上有 a height: 100%;.container.content缩小,使用 amin-height来防止这种情况;

.container {
    display: flex;
    flex-direction: column;
    height: 100%;
    width: 400px;
    background-color: white;
    border: 1px solid black;
    text-align: center;
    border-collapse: collapse;
    overflow-y: hidden;
}

.header {
    justify-self: flex-start;
    background-color: #cdcdcd;
    padding: 8px;
}

.content {
    flex: 1 1 auto;
    height: 0px;
    min-height: 300px;
    
    border: 1px solid black;
    padding: 8px;
    overflow-y: scroll;
}

.footer {
    justify-self: flex-end;
    background-color: #cdcdcd;
    padding: 8px;
}
<div class="container">
    <div class="header">Header</div>
    <div class="content">
        <p>Very tall content</p>
        <p>Very tall content</p>
        <p>Very tall content</p>
        <p>Very tall content</p>
        <p>Very tall content</p>
        <p>Very tall content</p>
        <p>Very tall content</p>
        <p>Very tall content</p>
        <p>Very tall content</p>
        <p>Very tall content</p>
        <p>Very tall content</p>
        <p>Very tall content</p>
        <p>Very tall content</p>
        <p>Very tall content</p>
        <p>Very tall content</p>
        <p>Very tall content</p>
        <p>Very tall content</p>
        <p>Very tall content</p>
        <p>Very tall content</p>
        <p>Very tall content</p>
        <p>Very tall content</p>
        <p>Very tall content</p>
        <p>Very tall content</p>
    </div>

    <div class="footer">
        Footer
    </div>
</div>


推荐阅读