在 IE11 中包装 flex 项目被破坏

Posted

技术标签:

【中文标题】在 IE11 中包装 flex 项目被破坏【英文标题】:Wrapping flex items in IE11 is broken 【发布时间】:2014-07-21 15:40:36 【问题描述】:

我正在尝试使用新的 CSS3 Flexbox 功能构建表单布局。 目标是当您更改字段集中的元素数量、更改字体大小或更改视图大小时,字段集的元素会正确排列。 表单布局应该适用于所有现代浏览器:Chrome 35、Firefox 29 和 IE 11 它看起来很有前途,只是它在 IE 11 中不起作用。

我简化了代码并将其发布到http://jsfiddle.net/T4RL6/。 这里的视图看起来像 Chrome 和 Firefox 一样正确。

最重要的 CSS 代码部分:

.fieldset 
    background-color: green;
    border: 1px solid blue;
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    flex-flow: row wrap;
    align-content: flex-start;

但是 IE 11 根本不包装元素,所以它们用完了 #right div。 我很确定它应该在 IE11 中工作,你不需要-ms-flex-***: http://msdn.microsoft.com/de-de/library/ie/dn265027%28v=vs.85%29.aspx

【问题讨论】:

【参考方案1】:

看起来您几乎在每个元素上都调用了display: flex;。只有需要灵活的容器才应该具有该属性。这是我想出的,它似乎按照您要求的方式工作。

* 
    margin: 0px;
    padding: 0px;


body 
    background-color: black;
    font-family: Verdana sans-serif;
    font-size: 20px;


#content_wrapper 
    box-sizing: border-box;
    padding: 20px 20px;
    width: 100%;
    height: 100%;


#main_wrapper 
    display: flex;
    min-height: 20px;
    overflow: hidden;
    border: 5px solid red;


#right 
    flex: 1 auto;
    width: 400px;
    background: #cccccc;


fieldset 
    margin: 10px 0px;


.fieldset 
    background-color: green;
    border: 1px solid blue;


#pdf 
    width: 100%;
    height: 100%;


img 
    width: 100%;
    height: 100%;



form 
    margin: 20px 20px;


.field 
    display: flex;
    margin: 10px 10px;
    border: 1px solid black;
    align-content: stretch;
    padding: 5px 5px;


.smallInput 
    /* flex: 1 0 0; */


.bigInput 
    /* flex: 2 0 0; */


input 
    flex: 2;


label 
    flex: 1;
    margin-right: 10px;

这里有一个updated fiddle 来查看它的实际效果。

【讨论】:

但是如果你需要嵌套的弹性盒子呢? 好问题。任何时候你需要两个或多个项目相互灵活,父容器应该display: flex;。但是,如果子元素本身没有任何弹性子元素,则无需将其放在子元素上。【参考方案2】:

三年半后遇到了类似的问题。当一个灵活的容器溢出并且它的大小没有给出时,有时 IE 会尝试增加容器的大小而不是包装项目(与线程创建者链接的文章相反,该文章指出不会再发生)。

在您的情况下,您可能想尝试为容器设置width: 100%;,或者实际上是任何宽度值。

【讨论】:

以上是关于在 IE11 中包装 flex 项目被破坏的主要内容,如果未能解决你的问题,请参考以下文章

Bootstrap 表的 IE11 Flex 问题

使用flex-parent会破坏单项Flex布局

Flexbox 渲染被最新的 Chrome 破坏

Flex 在 chrome 中工作,但在 IE 中不工作

有没有办法在不破坏格式的情况下在 CSV 列中包含逗号?

查找破坏 IE 的 ECMAScript/JavaScript 错误