Прилипающий футер (sticky footer) на Angular 2+ и Flex-layout

Задача старая, инструменты новые. Приклеиваем футер к полу. Теперь на Angular с его новым движком компоновки Flex-layout.

Пусть мы имеем файл app.component.ts с шаблоном вида:

  template: `
    <div class="app-container">
      <div class="header"></div>
      <div class="body"></div>      
      <div class="footer"></div>
    </div>`

Для начала зададим высоту 100% для родительских элементов в файле style.css:

html, body, .app-container {
    height: 100%;
}

В шаблоне для .app-container зададим модель выравнивания в колонку с растягиванием по ширине:

<div class="app-container" fxLayout="column" fxLayoutAlign="start stretch">
...

Между блоками .body и .footer требуется добавить вспомогательный div, который будет занимать все свободное пространство между ними, когда контента до футера не хватает.

<div class="helper" fxFlex fxFlexFill></div>

Здесь важно заметить, что требуется указать и fxFlex, и fxFlexFill, хотя из документации выглядит, что прописывать fxFlex не требуется. Однако без него не работает.

Ну и собственно все! Можно поиграться с Plunker:

У этого способа есть еще одно преимущество - футер может быть динамической высоты. Т.е. не обязательно задавать фиксированную высоту для него, а она может определяться содержимым и размером окна. При этом футер все равно будет оставаться снизу и не будет перекрывать основной контент.