将页脚放在页面底部(如果需要滚动)

新手上路,请多包涵

我试图在页面底部显示页脚。如果页面长于 1 个屏幕,我希望页脚仅在滚动到底部后显示。所以我不能使用’position: fixed’,因为它会一直显示。

我正在尝试复制以下示例:http: //peterned.home.xs4all.nl/examples/csslayout1.html

但是,当我使用以下内容时,由于某种原因,页脚显示在我的长页面的一半。

 position: absolute; bottom:0

我有短页和长页,我希望它位于它们的底部。

如何将页脚也保留在长页面的底部?

小提琴

我创建了这些 Fiddles 来显示问题并测试代码。请在您的解决方案中发布一个工作示例。

我的页脚 CSS:

 html,body {
    margin:0;
    padding:0;
    height:100%; /* needed for container min-height */
}

.content {
    position:relative; /* needed for footer positioning*/
    margin:0 auto; /* center, not in IE5 */

    height:auto !important; /* real browsers */
    height:100%; /* IE6: treaded as min-height*/

    min-height:100%; /* real browsers */
}

/* --- Footer --- */
.footerbar {                                position: absolute;
                                            width: 100%;
                                            bottom: 0;

                                            color: white;
                                            background-color: #202020;
                                            font-size: 12px; }

a.nav-footer:link,
a.nav-footer:visited {                      color: white !important; }
a.nav-footer:hover,
a.nav-footer:focus {                        color: black !important;
                                            background-color: #E7E7E7 !important; }

原文由 Paul 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 332
2 个回答

同样,这里是 flexboxes 的一个干净的 hack: flex-grow

首先,让我们看一下代码:

 div#container {
  /* The power of flexboxes! */
  display: flex;
  display: -webkit-flex;
  flex-direction: column;

  min-height: 100vh;
}

div#container div#content {
  /* Key part: Eat the remaining space! */
  flex-grow: 1;
}

div#container footer {
  flex-basis: 100px;
}

/* Appearance, not important */
body {
  margin: 0;
  font-family: Fira Code;
}

@keyframes changeHeight {
  0% {height: 30px}
  10% {height: 30px}
  50% {height: 400px}
  60% {height: 400px}
  100% {height: 30px}
}

div, footer {
  color: white;
  text-align: center;
}

div#content section {
  background-color: blue;
  animation: changeHeight 10s infinite linear;
}

footer {
  background-color: indigo;
}
 <div id="container">
  <div id="content">
    <!-- All other contents here -->
    <section>Main content</section>
  </div>
  <footer>
    Footer
    <!-- Footer content -->
  </footer>
</div>

如果 #content 中的内容无法到达页脚,则 flex-grow 扩展元素以适应剩余空间,因为 #container 的最小高度为 100vh (即视口高度)。显然,如果 #content 的高度加上页脚超过视口高度, #container 将可以滚动。这样,页脚始终保持在最底部。

片段中的动画属于 #content 中的一个示例部分,它试图向您展示完全相同的事情:它的高度在 30px400px 之间变化(如果需要,将其更改为更大的值)。

此外,为了获得信息,请参阅 flex-basisheight (或 width )之间的区别

提示: 在 CSS3 中,如果某些东西不起作用,请查看 flexboxes 和 grids。他们通常提供干净的解决方案。

希望能帮助到你。

原文由 MAChitgarha 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题