IE 中的嵌套 <div>(带 flex 框)未填满父元素的全高

Nested <div> (with flex box) in IE does not fill full height of parent element

我有一些 <div> 嵌套在一个固定高度的容器中,我希望子元素填充父元素的整个高度。这在 Chrome 中效果很好,但在 IE 中失败(Windows 8 上的 11)。

(左: IE 右: Chrome)

我正在使用 Angular Material,所以我想尽可能坚持他们的布局 CSS 样式。

示例: CODEPEN

HTML:

<div style="height: 150px;width: 100%">
  <div style="background:#F00;border: 1px solid black;"
       layout-fill
       layout>
    <div style="background:#CCC"
         layout-fill>
      Test
    </div>
  </div>
</div>

<div style="height: 150px;width: 100%">
  <div style="background:#F00;border: 1px solid black;"
       layout-fill
       layout>
    <div style="background:#CCC"
         flex>
      Test
    </div>
  </div>
</div>

CSS:(示例中存在供应商前缀)

[flex] {
  box-sizing: border-box;
  flex: 1;
}

[layout] {
  box-sizing: border-box;
  display: flex;
}

[layout-fill] {
  margin: 0;
  min-height: 100%;
  width: 100%;
}

有没有人也遇到过这种问题,知道我该如何解决?

如果您同时使用 angular 和 angular-material,您可以考虑使用 layout="row/column"。使用 IE11 和下面的 Chrome 进行测试。

http://codepen.io/anon/pen/oXyEpY

<script>
  angular.module('MyApp').controller('AppCtrl', function($scope) {});
</script>

<div ng-controller="AppCtrl" ng-app="MyApp">
  <div style="height: 150px;width: 100%">
    <div style="background:#F00;border: 1px solid black;display: " layout-fill>
      <div style="background:#CCC" layout-fill>
        Section A (No layout, no flex)
      </div>
    </div>
  </div>

  <div layout="row" style="height: 150px">
    <div layout="column" style="background:#0005EF;border: 1px solid black;" flex>
      <div style="background:#CCC">
        Section B (Using layout, Without Flex)
      </div>
    </div>
  </div>

  <div layout="row" style="height: 150px">
    <div layout="column" style="background:#0FFF00;border: 1px solid black;" flex>
      <div style="background:#CCC" flex>
        Section C (Using layout, With Flex)
      </div>
    </div>
  </div>
</div>

出于示例的目的,我删除了 CSS/JS 文件。希望这对您有所帮助。

Link 到 angular material 中的布局:https://material.angularjs.org/latest/#/layout/container