将页脚保持在页面底部(如果需要,可以滚动)

时间:2015-01-24 17:49:18

标签: html css footer

我正在尝试在页面底部显示页脚。如果页面比1个屏幕更长,我喜欢页脚只能在滚动到底部后显示。所以我不能使用'position:fixed',因为它会一直显示。

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

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

position: absolute; bottom:0 

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

如何在长页面上保持页脚的底部?

小提琴

我已经创建了这些小提琴以显示问题并测试代码。 请使用您的解决方案发布一个工作示例。

我的页脚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; }

8 个答案:

答案 0 :(得分:9)

我建议使用“粘性页脚”方法。请参阅以下链接:

http://css-tricks.com/snippets/css/sticky-footer/

答案 1 :(得分:3)

用溢出替换高度:auto; &安培;给身体一个位置

html,body {
    position:relative; <!--Also give it a position -->
    margin:0;
    padding:0;
    overflow:auto; <!-- HERE -->
}

将页脚放置在相对于身体的位置

/* --- Footer --- */
.footerbar { 
    position: relative; <!-- HERE -->
    width: 100%;
    bottom: 0;
    color: white;
    background-color: #202020;
    font-size: 12px; 
}

在所有可能的情况下,相对定位你的元素总是更好,特别是你的主要元素,比如这种情况下的页脚。

短页面编辑

min-height:400px; <!-- Give this a real number like 400px 
                  or whatever you want...dont leave it to 100% as -->
}

答案 2 :(得分:1)

再次,这是flexbox附带干净代码的地方: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;
}

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

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></section>
  </div>
  <footer>
    <!-- Footer content -->
  </footer>
</div>

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

该片段中的动画属于#content内的一个示例部分,试图向您展示完全相同的东西:其高度在0px600px之间变化(将其更改如果需要的话可以提供更大的价值。

此外,为了参考起见,请参见the difference between flex-basis and height (or width)

提示:在CSS3中,如果某些方法不起作用,请查看弹性框和网格。他们通常会提供干净的解决方案。

希望有帮助。

答案 3 :(得分:0)

html,body {
    margin:0;
    padding:0;
    height:100%;
}
.content {
    padding:10px;
    padding-bottom:80px;   /* Height of the footer element */
}
.footerbar {
    width:100%;
    height:80px;
    position:absolute;
    bottom:0;
    left:0;
}

如果IE7

<!--[if lt IE 7]>
<style type="text/css">
    .content { height:100%; }
</style>
<![endif]-->

答案 4 :(得分:0)

有一个很好的页脚教程here

演示页面为here

基本前提是主体页面被拉伸到页面的100%。最小高度也是100%。

然后,页脚会被赋予以下规则:

.footerbar {
    clear: both;
    position: relative;
    z-index: 10;
    height: 3em;
    margin-top: -3em;
}

答案 5 :(得分:0)

我们一直在努力解决这个问题。几个嵌套的div加上黑客和补丁的div对我们来说变成了一场噩梦。 总有惊喜需要更多的黑客和更多的补丁。 这是我们已经解决的问题:

的CSS:

html, body  {
    margin: 0px;
    padding: 0px;
    height: 100%;
    color: #6f643a;
    font-family: Arial;
    font-size: 11pt; 
}

form {
   height: 100%;
}    

体:

<table style="z-index: 1; margin: 0px; left: 0px; top: 0px; overflow:auto" border="0"  width="100%" height="100%" cellspacing="0" cellpadding="0">
    <tr>
        <td valign="top" align="center" >
         contents goes here
        </td>
    </tr>
    <tr>
        <td valign="top" bgcolor="gray" align="center" style="padding:20px">
            <font color="#FFFF00">copyright:Puppy</font>
            footer goes here
        </td>
    </tr>
</table>

这就是你所需要的一切。 - 如果您使用的是asp.net,请不要忽略表单高度。

答案 6 :(得分:0)

现在我们有了flex-box,它非常简单。

 body {
        height: 100vh;
        display: flex;
        flex-direction: column;
        justify-content: space-between;
    }

注意:我们体内只能包含两个div。一个用于页脚,另一个用于其余项目

答案 7 :(得分:0)

使用“ 底部:0 ”将“ 位置”设置为“ 固定”解决了我的问题。现在它可以响应了,在较大的屏幕( pc,笔记本电脑)和较小的屏幕(智能手机上,页脚正确显示(并且即使滚动也保持在那里) em>)。

.footerbar {
  display: flex;
  justify-content: center;
  align-items: center;
  text-align: center;
  position: fixed;
  bottom: 0;
  width: 100vw;
  min-height: 3vh;
}