【问题标题】:Scrollable Body with auto-height Header and Footer具有自动高度页眉和页脚的可滚动正文
【发布时间】:2016-02-04 05:24:41
【问题描述】:

我的元素只是一个 Header,然后是 Body,然后是 Footer

<div id="my-element">
  <div id="header">...</div>
  <div id="body">
    ...
  </div>
  <div id="footer">...</div>
</div>

目前#my-element 被限制为浏览器窗口的最大高度。 #header#footer 具有可变高度,不应该是可滚动的元素。 #body 是唯一应该可滚动的元素,并且仅当所有 3 个高度的总和超过 #my-element 时才会发生。发生这种情况时,#body 是获得滚动条的元素。

出于某种原因,我怀疑 flexbox 有一些简单的解决方案,但我不熟悉该属性并且无法找到。

【问题讨论】:

  • 您的问题是您使用的保留标签只能有一个 perdocument developer.mozilla.org/en-US/docs/Web/HTML/Element/body
  • 使用 &lt;main&gt; 而不是 &lt;body&gt; 恕我直言
  • js 解决方案在这种情况下会非常简单。 css...嗯...
  • @scrappedcola:我提供的元素只是
    的伪装。我只是觉得这样会更清晰一些,而我使用它的地方实际上是 React :/
  • 这些细节应该在问题中。如您所见,您的信息与问题不一致。

标签: html css flexbox


【解决方案1】:

出于某种原因,我怀疑 flexbox 有一些直接的解决方案

你没有错!

/* The important bits: */
body {margin:0}
#my-element {
  display: flex;
  flex-direction: column;
  max-height: 100vh
}
#header, #footer {flex-shrink: 0}
#body { overflow-y: scroll }

/* The so-you-can-see-what-it's-doing bits: */
#header,
#body,
#footer {
  border: 1px solid
}
<div id="my-element">
  <div id="header">HEADER<br>HEADER</div>
  <div id="body">
   BODY<br>BODY<br>BODY<br>BODY<br>BODY<br>BODY<br>BODY<br>BODY<br>
   BODY<br>BODY<br>BODY<br>BODY<br>BODY<br>BODY<br>BODY<br>BODY<br>
   BODY<br>BODY<br>BODY<br>BODY<br>BODY<br>BODY<br>BODY<br>BODY<br>
  </div>
  <div id="footer">FOOTER</div>
</div>

这是我的 flexbox 备忘单;在大多数情况下,它确实比“传统”布局简单得多:

https://css-tricks.com/snippets/css/a-guide-to-flexbox/

【讨论】:

  • @user1778856,对于 IE,这里有一些指导:stackoverflow.com/a/35137869/3597276
  • 我不能不同意这种观点(这是对主要问题点的一个很好的描述,@Michael_B)在这一点上,我将旧版 IE 视为“优雅降级”的目标,但我知道这不是所有项目的选择。
猜你喜欢
相关资源
最近更新 更多
热门标签