灵活的 css 布局,包含容器内的页眉、页脚和滚动体

Posted

技术标签:

【中文标题】灵活的 css 布局,包含容器内的页眉、页脚和滚动体【英文标题】:Flexible css layout with header, footer and scrolling body inside container 【发布时间】:2015-08-26 17:40:03 【问题描述】:

里面有一个带有页眉、正文和页脚部分的块。页眉和页脚高度是固定的,正文高度由其内容决定。我需要外部块大小为其内容的大小,但不大于其容器的大小。如果正文高度超过最大可能大小,则为正文显示y-scroll,但页眉和页脚保留在外部块的顶部和底部。

我制作了FIDDLE。但是我只能在调整窗口大小时,滚动显示为外部块,而不是仅显示主体块。

这是 CSS 和 html

body, html 
  width: 100%;
  height: 100%;
  margin: 0;
  padding: 0;


.container 
  position: absolute;
  top: 10px; bottom: 10px; left: 10px; width: 200px;
  border: 1px solid red;


.innerContainer 
  border: 1px solid purple;
  max-height: 100%;
  overflow: auto;


.header, .footer 
  height: 30px;
  background: blue;


.body 
  background: green;
<div class='container'>
  <div class='innerContainer'>
    <div class='header'></div>
    <div class='body'>text<br>text<br>...</div>
    <div class='footer'></div>
  </div>
</div>

是否可以不使用 javascript 做我需要的事情?

编辑:我制作了一张图片以说明我需要什么。

【问题讨论】:

【参考方案1】:

这是你的代码,据我了解,你想要标题 粘在顶部和底部的页脚,如果你可以滚动正文 容器大小是必需的。

    <div class='container'>
      <div class='innerContainer'>
        <div class='header'></div>
        <div class='body'>text<br>texttext<br>texttext<br>texttext<br>texttext<br>texttext<br>texttext<br>texttext<br>texttext<br>texttext<br>text
</div>
        <div class='footer'></div>
      </div>
    </div>

我们需要分别设置页脚和页眉的样式以及您将在下面的代码中看到的样式 所以你添加到 .innerContainer (position: absolute; bottom: 0; right: 0; left: 0; height: 100%; overflow: hidden;) 和 .body 你添加(height: 50%; overflow-y: auto;)

   body, html 
  width: 100%;
  height: 100%;
  margin: 0;
  padding: 0;


.container 
  position: absolute;
  top: 10px; bottom: 10px; left: 10px; width: 200px;
  border: 1px solid red;


.innerContainer 
  border: 1px solid purple;
  height: 100%;
  max-height: 100%;
  overflow: hidden;
  bottom: 0;
  top: 0;
  right: 0;
  left: 0;
  position: absolute;


.header, .footer 
  height: 30px;
  background: blue;


.body 
  background: green;
  min-height: 20px;
  max-height: 36%;
  overflow-y: auto;
  font-size: 20px;

我希望你想要什么,如果你有任何问题,请告诉我。

【讨论】:

不幸的是,这不是我需要的。 footer 必须在 innerContainer 的底部,所以如果 body 高度小于屏幕尺寸,它应该贴在 body 底部,而不是贴在屏幕底部。 你指的是class还是tag哪个body? 标签。我需要的行为与我链接的小提琴完全一样,但是当您调整窗口大小时,滚动不应该出现在整个容器中,而是出现在 .body div 容器中,并且页脚应该保持可见。 好的,应该和我一样,但是底部的页脚与body div一起流动,对吧? 是的,.body div 不应溢出页眉和页脚。【参考方案2】:

我找到的唯一解决方案是使用 CSS3 calc。但在 android 浏览器中不起作用...FIDDLE

body, html 
    width: 100%;
    height: 100%;
    margin: 0;
    padding: 0;


.container 
    position: absolute;
    top: 10px; bottom: 10px; left: 10px; width: 200px;
    border: 1px solid red;
    overflow: hidden;


.header, .footer 
    height: 30px;
    background: blue;


.body 
    height: 300px;
    background: green;


.bodyContainer 
    max-height: calc(100% - 60px);
    overflow-y: auto;
<div class='container'>
        <div class='header'></div>
        <div class='bodyContainer'>
            <div class='body'></div>
        </div>
        <div class='footer'></div>
</div>

【讨论】:

以上是关于灵活的 css 布局,包含容器内的页眉、页脚和滚动体的主要内容,如果未能解决你的问题,请参考以下文章

滚动 tableView 部分的页脚和页眉

实现固定页眉和滚动,页脚和移动问题

带有 % extends 的每页上的 Django 页脚和页眉

css 使用灵活的中间容器修复页眉和页脚

将 iFrame 设置为固定页脚和页眉之间的全高

边框页脚和页眉长度调整为 s-s-rS