【问题标题】:CSS - Footer at the bottom and content in between header and footer [duplicate]CSS - 底部的页脚和页眉和页脚之间的内容[重复]
【发布时间】:2018-12-12 17:14:41
【问题描述】:

* {
  box-sizing: border-box;
}

.wrapper {
  max-width: 1024px;
  margin: 0 auto;
  font: 1.2em Helvetica, arial, sans-serif;
}

.wrapper>* {
  border: 2px solid #f08c00;
  background-color: #ffec99;
  border-radius: 5px;
  padding: 10px;
}

nav ul {
  list-style: none;
  margin: 0;
  padding: 0;
}

.wrapper {
  display: grid;
  grid-template-columns: repeat(12, [col-start] 1fr);
  grid-gap: 20px;
}

.wrapper>* {
  grid-column: col-start / span 12;
}

@media (min-width: 500px) {
  .side {
    grid-column: col-start / span 3;
    grid-row: 3;
  }
  .ad {
    grid-column: col-start / span 3;
    grid-row: 4;
  }
  .content,
  .main-footer {
    grid-column: col-start 4 / span 9;
  }
  nav ul {
    display: flex;
    justify-content: space-between;
  }
}

@media (min-width: 700px) {
  .main-nav {
    grid-column: col-start / span 2;
    grid-row: 2 / 4;
  }
  .content {
    grid-column: col-start 3 / span 8;
    grid-row: 2 / 4;
  }
  .side {
    grid-column: col-start 11 / span 2;
    grid-row: 2;
  }
  .ad {
    grid-column: col-start 11 / span 2;
    grid-row: 3;
  }
  .main-footer {
    grid-column: col-start / span 12;
  }
  nav ul {
    flex-direction: column;
  }
}
<!-- Learn about this code on MDN: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout/Realizing_common_layouts_using_CSS_Grid_Layout -->

<div class="wrapper">
  <header class="main-head">The header</header>
  <nav class="main-nav">
    <ul>
      <li><a href="">Nav 1</a></li>
      <li><a href="">Nav 2</a></li>
      <li><a href="">Nav 3</a></li>
    </ul>
  </nav>
  <article class="content">
    <h1>Main article area</h1>
    <p>In this layout, we display the areas in source order for any screen less that 500 pixels wide. We go to a two column layout, and then to a three column layout by redefining the grid, and the placement of items on the grid.</p>
  </article>
  <aside class="side">Sidebar</aside>
  <div class="ad">Advertising</div>
  <footer class="main-footer">The footer</footer>
</div>

Here's an example from mozilla doc.

如何让页脚始终停留在页面底部(无论视口如何)

如何使页眉和页脚之间的内容覆盖整个剩余区域(无论视口如何)。基本上,我如何确保 b/w 中的页眉 + 页脚 + 内容(和边距)覆盖 100% 的高度?

最后一个问题,我想用 bootstrap 来实现。是否有任何引导模板可以使用它的类来做到这一点? (响应能力很重要)。

附言学习 html/css,因此对您的解决方案如何工作的一些解释将非常有帮助。

【问题讨论】:

    标签: html css twitter-bootstrap bootstrap-4


    【解决方案1】:

    width: 100vw;height: 100vh; 添加到您的包装器中,它将拉伸。我也加了

    html, body{
      margin: 0;
    }
    

    因为100vw 没有考虑正文的边距,所以您必须将其设置为 0。

    * {
      box-sizing: border-box;
    }
    
    html, body{
      margin: 0;
    }
    
    
    .wrapper {
      max-width: 1024px;
      margin: 0 auto;
      font: 1.2em Helvetica, arial, sans-serif;
      width: 100vw; 
      height: 100vh;
    }
    
    .wrapper>* {
      border: 2px solid #f08c00;
      background-color: #ffec99;
      border-radius: 5px;
      padding: 10px;
    }
    
    nav ul {
      list-style: none;
      margin: 0;
      padding: 0;
    }
    
    .wrapper {
      display: grid;
      grid-template-columns: repeat(12, [col-start] 1fr);
      grid-template-rows: 50px auto auto 50px;
      grid-gap: 20px;
    }
    
    .wrapper>* {
      grid-column: col-start / span 12;
    }
    
    @media (min-width: 500px) {
      .side {
        grid-column: col-start / span 3;
        grid-row: 3;
      }
      .ad {
        grid-column: col-start / span 3;
        grid-row: 4;
      }
      .content,
      .main-footer {
        grid-column: col-start 4 / span 9;
      }
      nav ul {
        display: flex;
        justify-content: space-between;
      }
    }
    
    @media (min-width: 700px) {
      .main-nav {
        grid-column: col-start / span 2;
        grid-row: 2 / 4;
      }
      .content {
        grid-column: col-start 3 / span 8;
        grid-row: 2 / 4;
      }
      .side {
        grid-column: col-start 11 / span 2;
        grid-row: 2;
      }
      .ad {
        grid-column: col-start 11 / span 2;
        grid-row: 3;
      }
      .main-footer {
        grid-column: col-start / span 12;
      }
      nav ul {
        flex-direction: column;
      }
    }
    <div class="wrapper">
      <header class="main-head">The header</header>
      <nav class="main-nav">
        <ul>
          <li><a href="">Nav 1</a></li>
          <li><a href="">Nav 2</a></li>
          <li><a href="">Nav 3</a></li>
        </ul>
      </nav>
      <article class="content">
        <h1>Main article area</h1>
        <p>In this layout, we display the areas in source order for any screen less that 500 pixels wide. We go to a two column layout, and then to a three column layout by redefining the grid, and the placement of items on the grid.</p>
      </article>
      <aside class="side">Sidebar</aside>
      <div class="ad">Advertising</div>
      <footer class="main-footer">The footer</footer>
    </div>

    【讨论】:

    • 谢谢,需要深入了解您的 sln,但经过快速测试后,如何使页眉和页脚不随其他所有内容一起增长?页眉和页脚的最大高度为 60 像素,在两者之间创建了大量空白空间。此外,在较小的宽度下,页脚变为视口的 ~2/3 宽度。是否可以一直保持 100% 宽度?
    • 我更新了答案,添加grid-template-rows: 50px auto auto 50px;。页脚变为 ~2/3,因为您有一个媒体查询将其设置为这种方式。您还必须决定如何设置其他元素的布局......
    • 感谢您的更新和解释。干杯!