CSS粘性页脚的问题

时间:2010-10-11 12:15:29

标签: html css xhtml

我正在尝试实现CSS粘性页脚。

问题是有一个内容DIV超出了它的容器,导致滚动条不可取,并且挂在页面div上的背景图像不会扩展文档的整个高度。

这是我的HTML:

    <div id="page">
          <div id="header">
            <dl>
                <dt>Header links -</dt>
                <dd><a href="#">link 1</a></dd>
                <dd><a href="#">link 2</a></dd>
                <dd><a href="#">link 3</a></dd>
            </dl>
          </div>
        <div id="content">
            <p><a id="modal" href="popup.html" target="_blank">link to popup</a></p>
        </div>      
        <div id="footer">
            <dl>
                <dt>Footer links -</dt>
                <dd><a href="#">link 1</a></dd>
                <dd><a href="#">link 2</a></dd>
                <dd><a href="#">link 3</a></dd>
            </dl>
        </div>
    </div>

这是CSS:

/*--------------------------------------------------------------- global */

html, 
body {
    color:#969696;
    font-size:100%;
    height:100%;
}

body {
    font:normal 200 70% Arial, Helvetica, Verdana, sans-serif;  
}

a, 
a:link, 
a:visited, 
a:hover, 
a:active {
    border-bottom:1px dashed #ff8400;
    color:#ff8400;
    text-decoration:none;}

a:hover {
    border-bottom-style:solid;}

/*--------------------------------------------------------------- layout */

#page {
    background:url("../images/bgMain.jpg") repeat-y center top;     
    height:100%;
    margin:0 auto;
    position:relative;
    width:1024px;
}

dl, 
dt, 
dd {
    float:left;
} 


dd {
    margin:0 .2em 0;
}

dd:after {
    color:#969696;
    content:"|";
    padding:0 0 0 .3em;
}

dd:last-child:after {
    content:"";
}

/*----------------- header */

#header {
    margin:0 auto;
    width:726px;
}

#header dl {
    float:right;
    line-height:60px;
}

/*----------------- content body */

#content {
    background:#fff;
    border-top-left-radius:5px;
    border-top-right-radius:5px;
        -moz-border-radius-topleft:5px;
        -moz-border-radius-topright:5px;
        -webkit-border-top-left-radius:5px;
        -webkit-border-top-right-radius:5px;
    box-shadow:0 0 12px 0 rgba(0, 0, 0, .1);    
        -moz-box-shadow:0 0 12px 0 rgba(0, 0, 0, .1);
        -webkit-box-shadow:0 0 12px 0 rgba(0, 0, 0, .1);
    clear:both;
    height:100%;
    margin:0 auto;  
    min-height:100%;
    padding:16px 13px 22px;
    position:relative;
    width:700px;
}

/*----------------- footer */

#footer {
    clear:both;
    margin:-22px auto;
    position:relative;
    width:726px;
}

#footer dl {
    display:inline; 
    margin:0 0 0 13px;
}

#footer a, 
#footer a:link, 
#footer a:visited, 
#footer a:hover, 
#footer a:active {
    border-bottom-color:#969696;
    color:#969696;
}

12 个答案:

答案 0 :(得分:9)

精彩的CSS Tricks网站在其Snippets区域中有一个粘性页脚的片段

  

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

或使用jQuery

  

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

最新链接演示

答案 1 :(得分:5)

现代清洁CSS“粘性页脚”来自James Dean

<强> HTML

<!DOCTYPE html>
<head>
    <title></title>
</head>
<body>
    <nav></nav>
    <article>Lorem ipsum...</article>
    <footer></footer>
</body>
</html>

<强> CSS

html {
    position: relative;
    min-height: 100%;
}
body {
    margin: 0 0 100px; /* bottom = footer height */
}
footer {
    position: absolute;
    left: 0;
    bottom: 0;
    height: 100px;
    width: 100%;
}

Demo here

答案 2 :(得分:4)

显然,您需要更改#footer的规则以包含已定义的高度,然后更改负边距顶部规则,其值等于您定义的高度。

http://ryanfait.com/resources/footer-stick-to-bottom-of-page/

答案 3 :(得分:3)

我几天前写了一个非常干净的CSS页脚,你会发现它很有用。

http://mystrd.at/modern-clean-css-sticky-footer

答案 4 :(得分:3)

您将在此github存储库(Bredele css sticky footer)上找到两个版本的粘性页脚:一个带有标题,另一个没有。

这两个版本都使用display:table(适用于IE8),没有额外的标记,没有clearfix和灵活的内容高度。 此外,标题高度不依赖于内容填充或相对视口!

希望它会有所帮助!

奥利弗

答案 5 :(得分:2)

使用

删除滚动条
overflow: hidden

在它们出现的容器上。

答案 6 :(得分:1)

为页脚使用以下样式:

#footer{position:absolute;bottom:0}

如果您希望它位于<div id="page">添加

的底部,则会始终将其置于屏幕底部
#page{position:relative}

答案 7 :(得分:0)

当您不知道页脚的高度时,例如响应式布局,该怎么办?是使用JavaScript和window.onresize的唯一选择吗?

答案 8 :(得分:0)

您可以使用此风格:

html {
    height: 100%;
    box-sizing: border-box;
}

*,
*:before,
*:after {
    box-sizing: inherit;
}

body {
    margin: 0;
    padding: 0 0 8rem 0;
    min-height: 100%;
    position: relative;
}

.myFooter {
    position: absolute;
    bottom: 0;
    right: 0;
    left: 0;
    width: 100%;
    padding: 0 8rem;
}

答案 9 :(得分:0)

有一个非常有用的CSS技巧,即使内容的高度低于视口的高度,它也会始终使页脚停留在底部。

请参见下面的HTML代码:

<!DOCTYPE html>
<html>
 <head>
  <title>Sticky Footer</title>
 </head>
 <body>
  <div class="content">&nbsp;</div>
  <footer>&copy; 2016</footer>
 </body>
</html>

请参见下面的CSS代码:

body {
 margin: 0; /* If not already reset */
}

.content {
 min-height: calc(100vh - 20px);
}

footer {
 height: 20px;
}

就您而言,我会将导航和文章包装在“内容” div中。并将其最小高度值设置为calc(100vh-100px)。

以下是文章的来源:Sticky CSS Footer

答案 10 :(得分:0)

使用FlexBox

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

以此解决了页脚内容页面不完整的所有问题。

答案 11 :(得分:0)

世间一切都那么简单!,你只需要坚持到底...

使用下一个代码:

-L
//This is jus't a stupid detail
//So, don't take much importance!

const text = document.getElementById('footer');

text.onmouseover = function(){
  text.style.color = "red";
}

text.onmouseleave = function(){
  text.style.color = "white";
}

while (e = true){
  text.innerText = "Hello!";
  setTimeout(function(){
   text.innerText = "I love coding";
   setTimeout(function(){
    text.innerText = "Codede by INovomiast";
   }, 1500);
  },1500);
}
footer{
  background-color: rgb(0,0,0,0.5);
  width: 100%;
  color: white;
  bottom: 0;
  position: absolute;
}