CSS:固定在底部并居中


79

我需要将页脚固定在页面底部并居中。页脚的内容可能随时更改,因此我不能仅通过margin-left居中:xxpx; 右边距:xxpx;

问题是由于某种原因这不起作用:

#whatever {
  position: fixed;
  bottom: 0px;
  margin-right: auto;
  margin-left: auto;
}

我爬网,一无所获。我试着做一个容器div和nada。我尝试了其他组合和gurnisht。我怎样才能做到这一点?

谢谢


它不是居中吗?还是不位于页面底部?或两者?
brettkelly

我不能没有另一个而实现。如果同时写了这两个规则,它将既停留在底部,又停留在左边。
CamelCamelCamel09年

4
我知道这是旧帖子。但是有更好的方法可以做到这一点。只需创建与身体position:relativepadding页脚的大小+内容,你想页脚之间的空间。接下来,只要有一个页脚DIVabsolutebottom:0。动臂去炸药。
ThePrimeagen 2012年

我通常现在使用Compass。
CamelCamelCamel 2012年

@Michael,您的评论应该是答案。我希望我早点看过。
lmsurprenant 2014年

Answers:


52

您应该使用这样的粘性页脚解决方案:

* {
    margin: 0;
}
html, body {
    height: 100%;
}
.wrapper {
    min-height: 100%;
    height: auto !important;
    height: 100%;
    margin: 0 auto -142px; /* the bottom margin is the negative value of the footer's height */
}
.footer, .push {
    height: 142px; /* .push must be the same height as .footer */
}

还有其他类似的东西。

* {margin:0;padding:0;} 

/* must declare 0 margins on everything, also for main layout components use padding, not 
vertical margins (top and bottom) to add spacing, else those margins get added to total height 
and your footer gets pushed down a bit more, creating vertical scroll bars in the browser */

html, body, #wrap {height: 100%;}

body > #wrap {height: auto; min-height: 100%;}

#main {padding-bottom: 150px;}  /* must be same height as the footer */

#footer {position: relative;
    margin-top: -150px; /* negative value of footer height */
    height: 150px;
    clear:both;} 

/* CLEAR FIX*/
.clearfix:after {content: ".";
    display: block;
    height: 0;
    clear: both;
    visibility: hidden;}
.clearfix {display: inline-block;}
/* Hides from IE-mac \*/
* html .clearfix { height: 1%;}
.clearfix {display: block;}

与html:

<div id="wrap">

    <div id="main" class="clearfix">

    </div>

</div>

<div id="footer">

</div>

1
这不是真的。如果使用固定或绝对定位,则仅指定底部位置会将元素附加到底部。但是,执行此操作意味着无论如何都始终将元素固定在底部。粘贴页脚是唯一的一种方法,当主体比视口短时,页脚可以粘住,而当它比视口高时,页脚可以向下移动。
jrista 2009年

44

Daniel Kanis修改的代码

只需在CSS中更改以下几行

.problem {text-align:center}
.enclose {position:fixed;bottom:0px;width:100%;}

并在html中:

<p class="enclose problem">
Your footer text here.
</p>

底部:0我需要的全部
danday74 '18

26

jQuery解决方案

$(function(){
    $(window).resize(function(){
        placeFooter();
    });
    placeFooter();
    // hide it before it's positioned
    $('#footer').css('display','inline');
});

function placeFooter() {    
    var windHeight = $(window).height();
    var footerHeight = $('#footer').height();
    var offset = parseInt(windHeight) - parseInt(footerHeight);
    $('#footer').css('top',offset);
}

<div id='footer' style='position: fixed; display: none;'>I am a footer</div>

有时,实现JS比破解旧CSS容易。

http://jsfiddle.net/gLhEZ/


6

问题出在position: static。静态意味着完全不对该位置做任何改动。position: absolute是你想要的。虽然居中元素仍然很棘手。以下应该工作:

#whatever {
  position: absolute;
  bottom: 0px;
  margin-right: auto;
  margin-left: auto;
  left: 0px;
  right: 0px;
}

要么

#whatever {
  position: absolute;
  bottom: 0px;
  margin-right: auto;
  margin-left: auto;
  left: 50%;
  transform: translate(-50%, 0);
}

但是我推荐第一种方法。我从以下答案中使用了居中技术: 如何在div中将绝对定位的元素居中?


3

我看到两个潜在的问题:

1-IE在以前已解决位置问题:已修复。如果您使用的IE7 +具有有效的文档类型或非IE浏览器,则这不是问题的一部分

2-如果要使页脚对象居中,则需要为页脚指定宽度。否则,它默认为页面的全宽,并且左侧和右侧的自动边距设置为0。如果您希望页脚栏占据宽度(如StackOverflow通知栏)并将文本居中,则需要在您的定义中添加“ text-align:center”。


3

我已经将``问题div包裹在另一个div中'',让我们将此div称为封闭div ...使CSS中的封闭div的宽度为100%,位置固定为0的底部...然后将问题div插入封闭div这就是它的外观

#problem {margin-right:auto;margin-left:auto; /*what ever other styles*/}
#enclose {position:fixed;bottom:0px;width:100%;}

然后在html中...

<div id="enclose">
    <div id="problem">
    <!--this is where the text/markup would go-->
    </div>
</div>

有呀!
-超文本


1

根据@Michael的评论:

有一种更好的方法可以做到这一点。只需创建带有position:relative和padding的页脚大小+所需内容和页脚之间的空间的主体。然后,将页脚div设为绝对值,并且bottom:0。

我去寻找解释,归结为:

  • 默认情况下,bottom:0px的绝对位置会将其设置为窗口的底部,而不是页面的底部。
  • 元素的相对定位会重置其子元素的绝对位置的范围...因此,通过将主体设置为相对位置,bottom:0px的绝对位置现在可以真正反映页面的底部。

有关更多详细信息,请访问http://css-tricks.com/absolute-positioning-inside-relative-positioning/


0

这是使用CSS网格的示例。

html, body{
    height: 100%;
    width: 100%;
}
.container{
    height: 100%;
    display:grid;
    /*we divide the page into 3 parts*/
    grid-template-rows: 20px auto  30px;
    text-align: center;   /*this is to center the element*/ 
    
}

.container .footer{
    grid-row: 3;   /*the footer will occupy the last row*/
    display: inline-block;
    margin-top: -20px;
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="style.css">
    <title>Document</title>
</head>
<body>
    <div class="container">
        <div class="header">

        </div>
        <div class="content">

        </div>
        <div class="footer">
            here is the footer
        </div>
    </div>
</body>
</html>

您可以使用CSS网格:一个具体示例


0

我遇到了一个问题,其中典型的position: fixedbottom: 0没有工作。发现了带有的简洁功能position: sticky。请注意,它是“相对”新的,因此它不适用于IE / Edge 15及更早版本。

这是w3schools的示例。

<!DOCTYPE html>
<html>
<head>
<style>
div.sticky {
  position: sticky;
  bottom: 0;
  background-color: yellow;
  padding: 30px;
  font-size: 20px;
}
</style>
</head>
<body>

<p>Lorem ipsum dolor nteger frinegestas odio, vitae scelerisque enim ligula venenatis dolor. Maecenas nisl est,  dolor nteger frinegestas odio, vitae scelerisque enim ligula venenatis dolor. Maecenas  dolor nteger frinegestas odio, vitae scelerisque enim ligula venenatis dolor. Maecenas  dolor nteger frinegestas odio, vitae scelerisque enim ligula venenatis dolor. Maecenas  dolor nteger frinegestas odio, vitae scelerisque enim ligula venenatis dolor. Maecenas  dolor nteger frinegestas odio, vitae scelerisque enim ligula venenatis dolor. Maecenas  dolor nteger frinegestas odio, vitae scelerisque enim ligula venenatis dolor. Maecenas  dolor nteger frinegestas odio, vitae scelerisque enim ligula venenatis dolor. Maecenas  dolor nteger frinegestas odio, vitae scelerisque enim ligula venenatis dolor. Maecenas  dlerisque enim ligula venenatis dolor. Maecenas  dolor nteger frinegestas odio, vitae scelerisque enim ligula venenatis dolor. Maecenas  dolor nteger frinegestas odio, vitae scelerisque enim ligula venenatis dolor. Maecenas  dolor nteger frinegestas odio, vitae scelerisque enim ligula venenatis dolor. Maecenas  dolor nteger frinegestas odio, vitae scelerisque enim ligula venenatis dolor. Maecenas  dolor nteger frinegestas odio, vitae scelerisque enim ligula venenatis dolor. Maecenas  dlerisque enim ligula venenatis dolor. Maecenas  dolor nteger frinegestas odio, vitae scelerisque enim ligula venenatis dolor. Maecenas  dolor nteger frinegestas odio, vitae scelerisque enim ligula venenatis dolor. Maecenas  dolor nteger frinegestas odio, vitae scelerisque enim ligula venenatis dolor. Maecenas  dolor nteger frinegestas odio, vitae scelerisque enim ligula venenatis dolor. Maecenas  dolor nteger frinegestas odio, vitae scelerisque enim ligula venenatis dolor. Maecenas  dlerisque enim ligula venenatis dolor. Maecenas  dolor nteger frinegestas odio, vitae scelerisque enim ligula venenatis dolor. Maecenas  dolor nteger frinegestas odio, vitae scelerisque enim ligula venenatis dolor. Maecenas  dolor nteger frinegestas odio, vitae scelerisque enim ligula venenatis dolor. Maecenas  dolor nteger frinegestas odio, vitae scelerisque enim ligula venenatis dolor. Maecenas  dolor nteger frinegestas odio, vitae scelerisque enim ligula venenatis dolor. Maecenas  dlerisque enim ligula venenatis dolor. Maecenas  dolor nteger frinegestas odio, vitae scelerisque enim ligula venenatis dolor. Maecenas  dolor nteger frinegestas odio, vitae scelerisque enim ligula venenatis dolor. Maecenas  dolor nteger frinegestas odio, vitae scelerisque enim ligula venenatis dolor. Maecenas  dolor nteger frinegestas odio, vitae scelerisque enim ligula venenatis dolor. Maecenas  dolor nteger frinegestas odio, vitae scelerisque enim ligula venenatis dolor. Maecenas  dolor nteger frinegestas odio, vitae scelerisque enim ligula venenatis dolor. Maecenas  dolor nteger frinegestas odio, vitae scelerisque enim ligula venenatis dolor. Maecenas  dolor nteger frinegestas odio, vitae scelerisque enim ligula venenatis dolor. Maecenas  dolor nteger frinegestas odio, vitae scelerisque enim ligula venenatis dolor. Maecenas </p>

<div class="sticky">I will stick to the screen when you reach my scroll position</div>

</body>
</html>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.