CSS Flexbox 浏览器兼容性问题

CSS Flexbox Browser Compatibility Issues

我一直在使用 CSS3 的 Flexbox 布局来安排网站上的组件。在大多数情况下,一切都按预期进行得很好。然而,在旧 iPad(运行 iOS 版本 9.3.5(不知道在哪里可以找到 Safari 版本)和三星 Edge 6 'Internet' 应用程序,我发现了一些问题。内容将完全加载,页脚也是如此,但不是内容在顶部加载,页脚在下面,页脚似乎随机加载在内容之上(当我说在顶部时,我不是说在浏览器顶部)。

我已经在最新版本的 Google Chrome 和 Microsoft Edge 以及 iPhone 5 的移动版 Safari、iPhone 6 的移动版上测试了该网站Safari 和 Samsung Edge 6 的手机 Google Chrome;一切都按预期进行。

我按照 this 教程 (Flexbox) 安排组件。

这是我的代码(包括 webkit 等,我认为会增加兼容性):

html {
    height: 100%;
}

body {
    display: -webkit-box;
    display: -moz-box;
    display: -ms-flexbox;
    display: -webkit-flex;
    display: flex;
    -webkit-box-orient: horizontal;
    -moz-box-orient: horizontal;
    -webkit-box-direction: normal;
    -moz-box-direction: normal;
    -webkit-flex-direction: column;
    -ms-flex-direction: column;
    flex-direction: column;

    min-height: 100%;
}

.content {
    -webkit-order: 1;
    -ms-flex-order: 1;
    order: 1;
    -webkit-box-flex: 1;
    -moz-box-flex: 1;
    -webkit-flex: 1;
    -ms-flex: 1;
    flex: 1;
}

footer {
    -webkit-order: 2;
    -ms-flex-order: 2;
    order: 2;
}

我在"order"里也加了属性看有没有影响,还是没有。

所以我想知道的是,有解决办法吗?或者,如果不是,我应该怎么做才能让不太现代的浏览器接受后备?

谢谢,

马修

如果你想看看合适的后备方法,我会考虑:

display: inline-block;
vertical-align: top;

或者如果你想更深入,你可以使用table方法。

父元素:

display: table;

子元素:

display: table-cell;

显然,因为您希望 flex 成为元素的显示,而 css 是级联的,您可以应用 display: table; 到不影响较新浏览器的元素:

.myElement{
   display:table; // Work on older - none support.
   display: flex; // Work on newer browsers. 
}

正如@Baruch 在评论中指出的,浏览器支持就是一切,不幸的是,旧版浏览器不喜欢 flex。

我还会考虑特定浏览器的用户数量,例如有多少人实际使用三星浏览器?使用 http://gs.statcounter.com/ 将是一个很大的帮助,如果用户基数低并且项目没有分配足够的预算,请放弃支持。

或者允许优雅降级 - 页面永远不会在每个浏览器中看起来都一样(这是不可能的)但是,如果页面可用并且用户可以获得信息,那么问题是什么?

希望对您有所帮助。