2017-9-13

FlexBoxを使って、コンテンツが少ないときでもFooter画面下端に配置する場合の注意

雑な技術メモ

結論

DEMO

詳細

諸々省略すると単純な実装は以下の通りになる。

DEMO

<div class="l-app">
  <div class="l-app_header">Header</div>
  <div class="l-app_content"></div>
  <div class="l-app_footer">Footer</div>
</div>
.l-app {
  display: flex;
  flex-direction: column;

  min-height: 100vh;
}
.l-app_content {
  flex-grow: 1;
}

基本的にはこれだけで Footer の画面下端配置が可能になるが、IE11 だけこれでは正常に動かない。

どうも IE11 はdisplay: flexな要素にmin-heightしか与えられていない場合、flex-item がmin-heightを考慮出来ない模様。

理由はわからないが、display: flexなラッパーで囲めば IE11 でも正常に動作する。

<div class="wrapper">
  <div class="l-app">
    <div class="l-app_header">Header</div>
    <div class="l-app_content"></div>
    <div class="l-app_footer">Footer</div>
  </div>
</div>
.wrapper {
  display: flex;
  flex-direction: column;
}
.l-app {
  display: flex;
  flex-direction: column;

  min-height: 100vh;
}
.l-app_content {
  flex-grow: 1;
}