Search code examples
htmlcsssticky-footer

sticky footer display table not working on Firefox / IE


I'm developing a basic sticky footer template using display: table technique. It works just fine in Chrome, but in Firefox and IE is not: footer is pushed away by the content.

Clearly i'm missing something basic here, i'm kinda newbie in CSS, so forgive me.

Here it is some code:

HTML

<div id="container">
    <div id="header" class="row">Header</div>
    <div id="content" class="row">
        <p>some content 1</p>
        <p>some content 2</p>
        <p>some content 3</p>
        ...
    </div>
    <div id="footer" class="row">Footer</div>
</div>

and CSS

html, body{ 
    height: 100%;
    overflow: hidden;
    padding: 0;
    margin: 0;
}
#container{
    width: 100px;
    height: 100%;
    display: table;
}
.row{
    display: table-row;
    position: relative;
}
#header, #footer{
    height: 50px;
}
#content{
    float: left;
    height: 100%;
    width: 100%;
    overflow: auto;
}

DEMO HERE

Thank you


Solution

  • remove the float:left from #content:

    Updated demo

    Update

    Given the need for a scrollable middle part and your fixed height header and footer, I would use fixed positioning instead of display:table;

    #header, #footer, #content {
        position:fixed;
        left:0;
        width:100%;
    }
    #header, #footer {
        background:red;
    }
    #header {
        top:0;
        height:50px;
    }
    #footer {
        bottom:0;
        height:50px;
    }
    #content {
        top:50px; /*height of header*/
        bottom:50px; /*height of footer*/
        overflow:auto;
        padding:0;
    }
    <div id="header" class="row">Header</div>
    <div id="content" class="row">
                <p>some content 1</p>
                <p>some content 2</p>
                <p>some content 3</p>
                <p>some content 4</p>
                <p>some content 5</p>
                <p>some content 6</p>
                <p>some content 1</p>
                <p>some content 2</p>
                <p>some content 3</p>
                <p>some content 4</p>
                <p>some content 5</p>
                <p>some content 6</p>
                <p>some content 1</p>
                <p>some content 2</p>
                <p>some content 3</p>
                <p>some content 4</p>
                <p>some content 5</p>
                <p>some content 6</p>
    </div>
    <div id="footer" class="row">Footer</div>