css 将页脚放在底部,页眉高度可变,内容溢出滚动[重复]

6tqwzwtp  于 2023-03-20  发布在  其他
关注(0)|答案(1)|浏览(110)

此问题在此处已有答案

Fill remaining vertical space with CSS using display:flex(6个答案)
3天前关闭。
我有一个应用程序,它的头有可变的高度,我这里的例子展示了一些,但它不是像这样硬编码的,而是头可以根据它的内部内容改变高度。
然后我有一个主内容部分,如果内容多于垂直空间,我希望它是可滚动的。最后,页脚部分必须始终位于页面底部。页脚的高度是静态设置的,在某个断点处有一个高度变化。
理想情况下,我希望整个页面都不能滚动(只有主部分的内容可以滚动)。
我一直在尝试根据需要硬编码高度变化,但很快发现,由于标题高度变化的不可预测性,根据断点进行数学运算并不能解决问题。
在保持页眉不变的情况下,有没有其他方法可以将页脚保持在页面底部,同时保持可滚动的主要内容,而不必硬编码所有断点高度计算?

* {
  margin: 0;
  padding: 0
}

header {
  background-color: coral;
  height: 20px;
}

main {
  background-color: goldenrod;
  height: calc(100vh - 20px - 75px);
}

footer {
  background-color: cadetblue;
  height: 75px;
}

@media (min-width: 500px) {
  header {
    height: 40px;
  }

  main {
    height: calc(100vh - 40px - 50px);
  }
  
  footer {
    height: 50px;
  }
}

@media (min-width: 900px) {
  header {
    height: 60px;
  }

  main {
    height: calc(100vh - 60px - 50px);
  }
}

@media (min-width: 1200px) {
  header {
    height: 80px;
  }

  main {
    height: calc(100vh - 80px - 50px);
  }

}

@media (min-width: 1400px) {
  header {
    height: 100px;
  }

  main {
    height: calc(100vh - 100px - 50px);
  }
}
<html>
  <header>Variable height header</header>
  <main> Content </main>
  <footer>This is a footer</footer>
</html>
vsdwdz23

vsdwdz231#

您可以使布局占据整个视口高度,并使用网格或弹性框使内容区域可拉伸,同时保持页眉和页脚固定。
在内容区域设置overflow: auto将允许它根据需要滚动。

html,
body {
  height: 100vh;
  margin: 0;
}

.container {
  height: 100vh;
  display: flex;
  flex-direction: column;
}

.container :is(header, footer) {
  flex: 0 0 auto;
  background: skyblue;
  padding: 1rem;
}

.container main {
  flex: 1 1 auto;
  overflow: auto;
}

.tall {
  min-height: 200vh;
  background-image: linear-gradient(180deg, skyblue 1px, transparent 1px);
  background-size: auto 25px;
  padding: 1rem;
  text-align: center;
}
<div class="container">
  <header>Variable height header</header>
  <main>
    <h1 class="tall">This element has a height on it to force scrolling and background lines to make the scrolling easier to see.</h1>
  </main>
  <footer>This is a footer</footer>
</div>

相关问题