html - CSS Flexbox 或 CSS Grid 用于页眉、粘性页脚和垂直对齐的中间内容?

标签 html css flexbox grid

我有一个要求,我们有页眉、中间部分和页脚。

页眉和页脚的高度可以或多或少取决于不同的屏幕尺寸和其中的内容。

如果页面不包含滚动,则页脚将粘在屏幕的末尾,并且如果小屏幕发生滚动,则页脚不应重叠在中间内容上。典型的贴纸页脚行为。

中间部分包含两列。并且每列内容应垂直居中对齐。

请引用下面的屏幕截图以了解引用内容

注意:我可以使用普通的粘性页脚和CALC来调整主要内容的高度,但它不会是动态的。我不想使用 javascript 来完成有关 DOMContentLoaded 和窗口大小调整的所有数学运算。

enter image description here

最佳答案

我的方法使用了一堆 flexbox 并使事情变得简单。

  • .container 是一个柱状 flex 盒子
  • main 占用最多的可用空间
  • headerfooter 仅占用所需空间(动态)
  • main 也是一个 Flexbox,但在行方向上容纳左右面板
  • 面板也是 Flexbox 容器,其内容水平和垂直居中
  • 您可能想以“全页”模式或 jsFiddle 观看演示

enter image description here

html,
body {
  margin: 0;
}

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

main {
  flex-grow: 1;
  display: flex;
  background-color: #eee;
}

.panel1,
.panel2 {
  background-color: brown;
  flex-grow: 1;
  display: flex;
  align-items: center;
  justify-content: center;
}

.panel-content {
  background-color: #ccc;
  padding: 3em;
}

header,
footer {
  background-color: #ccc;
  padding: 1em;
  text-align: center;
}
<div class="container">
  <header>Header</header>
  <main>
    <div class="panel1">
      <div class="panel-content">
        Content
      </div>
    </div>
    <div class="panel2">
      <div class="panel-content">
        Content
      </div>
    </div>
  </main>
  <footer>Sticky Footer</footer>
</div>

jsFiddle

关于html - CSS Flexbox 或 CSS Grid 用于页眉、粘性页脚和垂直对齐的中间内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54758559/

相关文章:

html - 我怎样才能防止我的背景视频扩展到比一个部分更远的地方?

html - Internet Explorer 不会扩展具有 flex-direction : column 的 flexbox

python - CherryPy 网页表单 : checkboxes produces error when unchecked

html - 使用 CSS3 只选择一个 child

javascript - 文本滚动时保持背景不变

javascript - Flexbox child : any way to reset "display: none"?

html - 在包装之前使 flexbox 缩小尺寸

javascript - Mobile Safari、jQuery 和绑定(bind)到 future 的 DOM 元素

html - 移动 CSS 导航点击事件

php - 如何使页脚对齐 1 行?