【问题标题】:Flex header, content, footer layoutFlex 页眉、内容、页脚布局
【发布时间】:2018-05-05 00:49:04
【问题描述】:

在下面的代码中,我希望内容部分填充到页脚到达屏幕底部的位置。

编辑:也许我应该更清楚中心对齐。页眉和页脚要垂直对齐,三个项目都需要从左垂直线开始,如下所示:

我怎样才能做到这一点?

html, body {
  margin: 0;
  padding: 0;
}

container{
  display: flex;
  flex-direction: column;
  position: fixed;
  top: 0;
  width: 100%;
}

header {
    height: 92px;
    background-color: #FFFFFF;
    border: 1px solid #DCE5EB;
}

footer {
    height: 92px;
    border: 1px solid #DCE5EB;
    background-color: #FFFFFF;
}

.content {
    height: 700px;
    flex: auto;
    background-color: #FFFFFF;
}
<div class="container">
  <header>Header</header>
  <div class"content">Content</div>
  <footer>Footer</footer>
</div>

【问题讨论】:

    标签: html css flexbox


    【解决方案1】:

    您忘记在您的班级content 中添加=。 这是一个简单的错字。

    对于您的内容。因为你有headerfooter 的静态高度。 您可以为您的内容提供100vh 的高度,并降低headerfooter 的高度,另外不要忘记考虑border2px 总计。 它会解决你的问题。

    编辑:可以通过将line-height 等于height 来实现垂直对齐。 并将其与您的边距对齐。您可以使用marginpadding,具体取决于您的要求。 或者你甚至可以使用

    display:flex;
    align-items:center;
    

    从您的内容中删除 94px + 94px

    html,
    body {
      margin: 0;
      padding: 0;
    }
    
    container {
      display: flex;
      flex-direction: column;
      top: 0;
      border: 10px solid black;
    }
    
    header {
      display: flex;
      align-items: center;
      height: 92px;
      background-color: #FFFFFF;
      border: 1px solid #DCE5EB;
      padding: 0 30px;
    }
    
    footer {
      height: 92px;
      display: flex;
      border: 1px solid #DCE5EB;
      background-color: #FFFFFF;
      align-items: center;
      padding: 0 30px;
    }
    
    .content {
      min-height: calc(100vh - 94px - 94px);
      background-color: #FFFFFF;
      padding: 0 30px;
    }
    <div class="container">
      <header>Header</header>
      <div class="content">Content</div>
      <footer>Footer</footer>
    </div>

    【讨论】:

    • 由于您没有真正解释为什么会这样,vh 单位相对于浏览器 viewport h八进行测量。这意味着它可以完全响应所有不同的屏幕尺寸。因此,如果您将容器设置为加起来为100vh,它们将完全填满屏幕。
    • 谢谢。我仍然需要对齐三个部分。请查看编辑后的原始帖子。
    • 你是怎么得到这些边框的?你在使用边距吗?
    【解决方案2】:

    除了 flexbox,您还可以使用 CSS Grid 创建此布局。

    fiddle

    html,
    body {
      margin: 0;
      height: 100%;
    }
    
    .container {
      display: grid;
      grid-template-rows: 92px 1fr 92px;
      height: 100%;
    }
    
    header,
    footer {
      display: flex;
      align-items: center;
      border: 1px solid #DCE5EB;
    }
    
    .content {
      overflow: auto;
    }
    <div class="container">
      <header>Header</header>
      <div class="content">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Doloremque dolorem, ad corporis amet id aut rem similique culpa expedita placeat molestiae itaque quos, esse, adipisci in beatae nisi laboriosam eius!<br>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Doloremque dolorem, ad corporis amet id aut rem similique culpa expedita placeat molestiae itaque quos, esse, adipisci in beatae nisi laboriosam eius!<br>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Doloremque dolorem, ad corporis amet id aut rem similique culpa expedita placeat molestiae itaque quos, esse, adipisci in beatae nisi laboriosam eius!<br>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Doloremque dolorem, ad corporis amet id aut rem similique culpa expedita placeat molestiae itaque quos, esse, adipisci in beatae nisi laboriosam eius!<br>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Doloremque dolorem, ad corporis amet id aut rem similique culpa expedita placeat molestiae itaque quos, esse, adipisci in beatae nisi laboriosam eius!<br>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Doloremque dolorem, ad corporis amet id aut rem similique culpa expedita placeat molestiae itaque quos, esse, adipisci in beatae nisi laboriosam eius!<br>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Doloremque dolorem, ad corporis amet id aut rem similique culpa expedita placeat molestiae itaque quos, esse, adipisci in beatae nisi laboriosam eius!<br>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Doloremque dolorem, ad corporis amet id aut rem similique culpa expedita placeat molestiae itaque quos, esse, adipisci in beatae nisi laboriosam eius!<br>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Doloremque dolorem, ad corporis amet id aut rem similique culpa expedita placeat molestiae itaque quos, esse, adipisci in beatae nisi laboriosam eius!<br>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Doloremque dolorem, ad corporis amet id aut rem similique culpa expedita placeat molestiae itaque quos, esse, adipisci in beatae nisi laboriosam eius!</div>
      <footer>Footer</footer>
    </div>

    【讨论】:

    • 谢谢,但我正在寻找灵活的解决方案。此外,您的解决方案将所有内容移动到父 div 的最左边。我希望它们位于屏幕中间部分的最左边。请参考原帖中的图表。
    • @ZeroDarkThirty 您需要明确元素应在左侧对齐的位置。使用网格,您可以轻松创建列。
    • 所有三个,页眉、内容和页脚。同样,不是最父 div 的左侧,而是内部垂直线。
    • @ZeroDarkThirty 我知道您希望所有三个元素都与“内部垂直线”对齐 - 但是,我无法猜测该线应该从哪里开始。
    • 那是任意的
    猜你喜欢
    • 2015-05-26
    • 2014-10-24
    • 2019-03-14
    • 2015-03-12
    • 1970-01-01
    • 1970-01-01
    • 2012-01-19
    • 2017-11-06
    • 2022-01-15
    相关资源
    最近更新 更多