Search code examples
htmlcssflexboxinternet-explorer-11

How to make a sticky footer using flexbox in IE11?


I'm trying to make a simple design with flexbox but I'm having trouble with IE11. Basically, I want a footer that sticks to the bottom only if the content is not high enough. I have no issue doing that with Chrome like this:

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

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

body {
  display: flex;
  flex-direction: column;
}

main {
  flex: 1;
}
<header>
  Header
</header>
<main>
  <p>Main</p>
  <p>Main</p>
  <p>Main</p>
  <p>Main</p>
  <p>Main</p>
</main>
<footer>
  Footer
</footer>

Just play with the number of <p>main</p> to see the wrong behaviour with IE11.

Is there a way to achieve this without JavaScript?


Solution

  • IE has a min-height bug and needs display: flex on the flex column containers parent, in this case the html

    Fiddle demo

    Update your CSS like this

    *,
    *:after,
    *:before {
      box-sizing: border-box;
    }
    html, body {
      margin: 0;
      display: flex;
    }
    body {
      flex-direction: column;
      min-height: 100vh;
    }
    main {
      flex-grow: 1;
    }
    <header>
      Header
    </header>
    <main>
      <p>Main</p>
      <p>Main</p>
      <p>Main</p>
      <p>Main</p>
      <p>Main</p>
    </main>
    <footer>
      Footer
    </footer>