CSS: fixed to bottom and centered

前端 未结 9 1274
南笙
南笙 2020-11-28 04:33

I need my footer to be fixed to the bottom of the page and to center it. The contents of the footer may change at all time so I can\'t just center it via margin-left: xxpx;

相关标签:
9条回答
  • 2020-11-28 05:10

    The problem lies in position: static. Static means don't do anyting at all with the position. position: absolute is what you want. Centering the element is still tricky though. The following should work:

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

    or

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

    But I recommend the first method. I used centering techniques from this answer: How to center absolutely positioned element in div?

    0 讨论(0)
  • 2020-11-28 05:11

    You should use a sticky footer solution such as this one :

    * {
        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 */
    }
    

    There are others like this;

    * {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;}
    

    with the html:

    <div id="wrap">
    
        <div id="main" class="clearfix">
    
        </div>
    
    </div>
    
    <div id="footer">
    
    </div>
    
    0 讨论(0)
  • 2020-11-28 05:12

    Based on the comment from @Michael:

    There is a better way to do this. Simply create the body with position:relative and a padding the size of the footer + the space between content and footer you want. Then just make a footer div with an absolute and bottom:0.

    I went digging for the explanation and it boils down to this:

    • By default, absolute position of bottom:0px sets it to the bottom of the window...not the bottom of the page.
    • Relative positioning an element resets the scope of its children's absolute position...so by setting the body to relative positioning, the absolute position of bottom:0px now truly reflects the bottom of the page.

    More details at http://css-tricks.com/absolute-positioning-inside-relative-positioning/

    0 讨论(0)
提交回复
热议问题