如何在 IE11 中修复 Flexbox 粘滞页脚

Posted

技术标签:

【中文标题】如何在 IE11 中修复 Flexbox 粘滞页脚【英文标题】:How Do I Fix A Flexbox Sticky Footer In IE11 【发布时间】:2015-10-28 09:15:44 【问题描述】:

我使用 flexbox 创建了一个粘性页脚。它适用于除 IE11 之外的所有浏览器。

Codepen

html 
  box-sizing: border-box;


*, *:before, *:after 
  box-sizing: inherit;


.Page 
  min-height: 100vh;
  display: flex;
  flex-direction: column;
  flex: 1;


.Page-header 
  background: blue;


.Page-footer 
  background: green;


.Page-body 
  background: red;
  flex: 1;
<div class="Page">
  <header class="Page-header">
    HEADER
  </header>
  <div class="Page-body">
    BODY
  </div>
  <footer class="Page-footer">
    FOOTER
  </footer>
</div>

为什么会在 IE11 中中断,我该如何解决?

【问题讨论】:

【参考方案1】:

问题是在 IE11 中 flexbox 不支持min-height,因此 flex box 折叠到其内容的高度。

你可以通过将你的 flexbox 包裹在另一个也有 flex-direction: column 的 flexbox 中来修复它。您还需要在原始 flexbox 上设置 flex: 1。出于某种原因,这会强制嵌套的 flexbox 尊重它的任何 min-height

Codepen

html 
  box-sizing: border-box;


*, *:before, *:after 
  box-sizing: inherit;


.Wrapper 
  display: flex;
  flex-direction: column;


.Page 
  min-height: 100vh;
  display: flex;
  flex-direction: column;
  flex: 1;


.Page-header 
  background: blue;


.Page-footer 
  background: green;


.Page-body 
  background: red;
  flex: 1;
<div class="Wrapper">
  <div class="Page">
    <header class="Page-header">
      HEADER
    </header>
    <div class="Page-body">
      BODY
    </div>
    <footer class="Page-footer">
      FOOTER
    </footer>
  </div>
</div>

【讨论】:

.Page-body 的内容变得大于它的父高度时在IE11 中不起作用:codepen @Cake_Seller,当内部内容比父容器大时,你解决了这个问题吗? @ArtyomPranovich 不,很遗憾没有。 我将这些样式添加到body display: flex; width: 100%; flex-direction: column; (我的正文只包含一个div#app,就像许多webapps 所做的那样,并且具有与上面.Page 相同的作用)并且事情似乎很好在 IE11、Edge 和 Windows Chrome 中。短页和长页。 在 .Page-body 上执行 flex-grow:1 和 flex-shrink:0 代替 flex:1。这对我有用。【参考方案2】:

试试

flex: 1 0 auto;

内容块

【讨论】:

奇数。对我来说,它在 IE11 中不起作用。正文/内容只是获取单行文本的高度。 经过一些修补后,当我还添加body display: flex 时,它似乎确实有效。不知道为什么。 @ACJ 我有点迟到了,但是 flex 属性只适用于使用 flex 显示的元素。 flexbox 机制引入了很多很酷的特性。您可以查看here。 @IonuțCiuta,我的观点更加微妙。 OP 已经将 flex 显示设置为容器 (.Page)。但是,如果我将弹性显示应用于body,我只能达到预期的结果,这似乎不相关。我最好的猜测是,这是 IE11 渲染引擎处理 flex 模型的特定方式的产物。 天哪。 2年后来到这里。几周来一直在尝试修复 IE7 中的 flexbox,这终于是我一直在寻找的解决方案。谢谢!【参考方案3】:

我使用 flexbug's recommendation of changing min-height on the body to just height 解决了这个问题

仅适用于某些情况,粘性页脚似乎是常见的用例之一。

【讨论】:

以上是关于如何在 IE11 中修复 Flexbox 粘滞页脚的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 Flexbox 粘滞页脚在 Safari 中不起作用?

css Flexbox粘滞页脚

用于页眉、粘滞页脚和垂直对齐的中间内容的 CSS Flexbox 或 CSS 网格?

Flex Box 粘滞页脚内容溢出

Flexbox 和 vh 高度单位在 IE11 中不兼容吗?

修复了仅用于最后一页的 PRINT 的粘滞页脚