为啥粘性页脚不起作用?

Posted

技术标签:

【中文标题】为啥粘性页脚不起作用?【英文标题】:Why doesn't sticky footer work?为什么粘性页脚不起作用? 【发布时间】:2014-05-04 05:32:04 【问题描述】:

我已经尝试了几件事,但我的粘性标题不起作用。我一直在尝试我找到的几个教程,但没有一个有效。我还查看了有关 *** 的不同帖子,但没有人描述我的问题。 这是我的 html

<div id='container'>
    <div id='header>blabla</div>
    <div id='actualpage'>bblablabal</div>
    <div id='footer'>blablafooterblabla</div>
</div>

这是css:

html, body 
padding: 0;
margin: 0;
height: 100%;

#container
background-color:white;
width:100%;
min-height: 100%;
height:100%;

#actualpage
width:750px; 
margin-left:auto;
margin-right:auto;
padding-bottom: 20px;

#footer
margin-top:-20px;
clear:both;
height:20px;
background-color:#A6CE39;
padding-top:6px;
padding-bottom:6px;
min-width:100%;
bottom:0;

感谢您的帮助!

【问题讨论】:

是页眉还是页脚? 也许小提琴会很棒 【参考方案1】:

您可以将position: fixedposition:absolute(如果您不希望页脚在滚动时粘在底部)添加到您的#footer

#footer
    margin-top:-20px;
    clear:both;
    height:20px;
    background-color:#A6CE39;
    padding-top:6px;
    padding-bottom:6px;
    min-width:100%;
    bottom:0;
    position: fixed;

【讨论】:

位置:固定在滚动时会粘在底部 我不确定 OP 是否想要这个。 这行得通,但是如果我的页面较长并且需要滚动怎么办? (页脚保持在同一个地方)而且我不希望它被固定所以它会随着我向下滚动,我只是希望它位于页面底部 然后从您的#footer 中删除bottom: 0【参考方案2】:

position:absolute; 添加到您的#footer &lt;div id='header&gt; 应该是 &lt;div id='header'&gt;

【讨论】:

这行得通,但是如果我的页面较长并且需要滚动怎么办? (页脚停留在同一个地方)而且我不希望它被固定,所以它会随着我向下滚动,我只是希望它位于页面底部。【参考方案3】:

如果您指的是您的footer,您可以将position: absolute 添加到您的#footer

Fiddle

#footer 
    margin-top:-20px;
    clear:both;
    height:20px;
    background-color:#A6CE39;
    padding-top:6px;
    padding-bottom:6px;
    min-width:100%;
    bottom:0;
    position: absolute;

【讨论】:

这行得通,但是如果我的页面较长并且需要滚动怎么办? (页脚停留在同一个地方)而且我不希望它被固定,所以它会随着我向下滚动,我只是希望它位于页面底部。【参考方案4】:
#container
background-color: yellow;
width:100%;
min-height: 100%;

#actualpage
width:750px; 
margin-left:auto;
margin-right:auto;
padding-bottom: 20px;

#footer
margin-top:-32px;
clear:both;
height:20px;
background-color:#A6CE39;
padding-top:6px;
padding-bottom:6px;
min-width:100%;



<div id='container'>
    <div id='header'>blabla</div>
    <div id='actualpage'>bblablabal</div>
</div>
    <div id='footer'>blablafooterblabla</div>

您需要容器 div 之外的页脚。 另外,底部:0;属性是不必要的,页脚的负边距需要包含填充,这会增加计算的高度

** 同样,将结束的“'”添加到 id='header

【讨论】:

如果您需要更多详细信息,请参阅此链接:http://www.cssstickyfooter.com/using-sticky-footer-code.html【参考方案5】:

tl;dr

查看工作中的 CodePen:http://cdpn.io/KwzuA

或使用 Flexbox - 参见演示:http://codepen.io/astrotim/pen/PwYQOJ/right/?editors=010

说明

position 用于粘性页脚通常不是一个好主意,因为它会从文档流中删除元素,并且在滚动时可能会导致页脚与内容重叠而产生不希望的结果。 p>

一种经过验证且值得信赖的方法是在包装器 div 内添加一个“推送”div,然后在包装器外部添加页脚 div。像这样:

<div id="wrapper">

  <header>
    <h1>Header</h1>
  </header>

  <div id="body">
    <p>Lorem ipsum...</p>
  </div><!--#body-->

  <div class="push"></div>

</div><!--#wrapper-->

<footer>
  <p>Footer</p>
</footer>

对于 CSS,您需要将 htmlbody#wrapper 设置为 height: 100%。然后将固定高度设置为footer,并将相同的高度应用于#push。然后你用一个负的margin-bottom 来抵消身体。 #wrapper 需要一些其他属性,如下所示:

html, body 
  height: 100%;

body 
  overflow-y: scroll;

#wrapper 
  min-height: 100%;
  height: auto !important;
  height: 100%;
  margin: 0 auto -160px;  

.push, footer 
  height: 160px;

footer 
  /* remember the box model: padding+height  */
  padding-top: 15px;
  height: 145px;

现在,当页面内容延伸到折叠下方时,页脚将正确流动,而当内容不延伸时,页脚将保持粘性。

** 使用弹性盒 **

解决这个问题的现代方法是使用 Flexbox。见:http://philipwalton.github.io/solved-by-flexbox/demos/sticky-footer/

我在recent project 上使用了 Flexbox 技术

【讨论】:

以上是关于为啥粘性页脚不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

位置粘性在IE中不起作用[重复]

粘性页脚覆盖正文内容的底部

为啥 Z-index 在这里不起作用? [复制]

Bootstrap 4 - 粘性页脚 - 动态页脚高度

粘性页脚引导程序 4 [重复]

如何在每个页面上获得粘性页脚