Flexbox 粘性页脚在 Safari 或 Chrome OSX 中不起作用

Flexbox sticky footer not working in Safari or Chrome OSX

我使用 flexbox 方法向 SharePoint 母版页添加了粘性页脚,它在 Windows 上的所有浏览器中工作正常,但在 Safari 或 Chrome 上无法正常工作OSX.

HTML大致如下:

<body>
    <form>
        <!-- 
            a whole bunch of SharePoint stuff here that I can't mess with 
         -->
         <div id="s4-workspace">
             <div id="s4-bodyContainer"></div>
             <div id="footer"></div>
         </div>
    </form>
</body>

我的初始 CSS 是这样的:

#s4-workspace {
    display: flex;
    flex-direction: column;
}
#footer {
    clear: both;
    height: 100px;
    min-height: 100px;
    width:100%;
    background-color: #2e2e2e;
    font-size: 11px;
    margin-top: auto;
}

经过一番搜索,我找到了 this question,并以此为基础开始尝试各种供应商前缀,甚至意识到我使用 flexbox 的方式可能有点非正统的。我没有让主要内容 div #s4-bodyContainer 增长到使用额外的 space,而是让页脚 div 扩展它的上边距以填充任何额外的 space,我想这会在必要时弯曲 #s4-workspace 以填充视口。

然后我尝试添加

#s4-bodyContainer {
    -webkit-box-flex: 1;
    -webkit-flex: 1;
    -ms-flex: 1;
    flex: 1;
}

但这也无济于事(实际上在 Windows 上的 IE 中开始出现问题,而 IE 之前运行良好)。

我试图在 Safari 和 Chrome OSX 中修复的行为是这样的:

页面呈现时,页脚似乎根据视口计算其上边距。它最初总是位于window的底部,好像内容很少,应该向下推到window的底部。但即使在它下面有很多内容流动时也会发生这种情况,而且它确实应该向下推到 #s4-bodyContainer 以下(超出视口)。如果我滚动页面,它只会位于页面上最初绘制的位置,并且会覆盖初始呈现时页面下方的任何内容。

我该怎么办?让弹性盒在 OSX 上正常工作的秘诀是什么?

找到答案here.

显然(我应该说毫不奇怪吗?)某些浏览器处理 flexbox 的方式存在一些错误。

我能够在 Windows 上的 IE、Firefox 和 Chrome 以及 OSX 上的 Safari、Firefox 和 Chrome 上可靠地获得我想要的行为,方法如下:

#s4-workspace {
    display: flex;
    flex-direction: column;
}


#s4-bodyContainer {
    flex: 1 0 auto;
}

#footer {
    clear: both;
    height: 100px;
    min-height: 100px;
    width:100%;
    background-color: #2e2e2e;
    font-size: 11px;
    margin-top: auto;
    flex-shrink: 0;
}