问题 IE 10-11 flex-basis属性的行为与webkit浏览器不同


我正在尝试使用 媒体对象,由一个 Media-body 和a Media-figure。 HTML和类遵循此形式(顺序无关紧要)。

.Media
   .Media-figure
   .Media-body

简单的CSS是(没有前缀):

.Media { 
   display: flex 
}

.Media-figure {
   flex: 0 0 auto;

   /* same as...
   flex-grow: 0;
   flex-shrink: 0;
   flex-basis: auto;
   */
}

.Media-body {
   flex: 1 1 0;

   /* same as...
   flex-grow: 1;
   flex-shrink: 1;
   flex-basis: 0;
   */
}

请注意,我正在调整 Media-figure flex-shrink因子为0(与我发布的链接相反)。我假设那个 Media-figure 是一些固定的尺寸,如果我们的空间太小,我们宁愿不要把它缩小。

运用 flex-basis: 0 为了 Media-body 应该将元素设置为没有初始大小,然后允许它使用剩余的可用空间,因为它是唯一的元素 flex-grow: 1。但是,在IE10-11中 flex-basis: 0 导致 Media-body 宽度是内部元素的宽度,如果内容太多,则会破坏任何包装行为。

http://jsfiddle.net/sgardn04/3enpp4wg/

(注意:如果你在chrome中查看它们,它们看起来完全一样。 使用IE10-11!

我目前的解决方法是设置 Media-body { flex-basis: auto },这似乎工作。我假设IE在这里有问题,因为我更喜欢webkit浏览器的行为。是否有支持IE渲染的规范的合理解释?或者基于我在这里定义的类,我们可以期待webkit浏览器的不同行为的任何情况?在这种情况下,这两个属性似乎表现完全相同。

编辑:我发现了这个 方便的图形,这似乎表明了 flex-basis 属性确定在考虑元素宽度之前或之后是否分布空间(flex-basis: 0 VS flex-basis: auto)。


974
2018-01-23 20:04


起源



答案:


差异是由于没有单位的价值 flex-basis。添加此(或省略0)可以在IE中获得预期的行为: 更新小提琴 

MDN文档 flex 提到这个:

首选大小为0 必须 有一个单位   避免被解释为灵活性。默认为0%   省略。


11
2018-01-23 21:02



我一直在阅读文档,并得出了相同的结论。 Microsoft引用“由数字指定的宽度, 接着是一个长度单位。“在他们的MSDN文档中,和MDN状态”定义为数字 其次是绝对单位 例如px,mm或pt,或父Flex容器主要大小属性的百分比“ - pwdst
MSDN还声明了flex属性“您需要指定一个带有单位的零弹性基础组件,或者先用两个弹性因子指定,以避免误解或无效声明。” - 尽管使用flex-grow和flex-shrink,原始代码应该基于该语句有效。该规范与MSDN一致并指出“必须将两个弹性系数之前的无单位零点解释为弹性因子。为避免误解或无效声明,作者必须指定一个零''flex-basis'组件与单位或先于两个弹性因子。“ - pwdst


答案:


差异是由于没有单位的价值 flex-basis。添加此(或省略0)可以在IE中获得预期的行为: 更新小提琴 

MDN文档 flex 提到这个:

首选大小为0 必须 有一个单位   避免被解释为灵活性。默认为0%   省略。


11
2018-01-23 21:02



我一直在阅读文档,并得出了相同的结论。 Microsoft引用“由数字指定的宽度, 接着是一个长度单位。“在他们的MSDN文档中,和MDN状态”定义为数字 其次是绝对单位 例如px,mm或pt,或父Flex容器主要大小属性的百分比“ - pwdst
MSDN还声明了flex属性“您需要指定一个带有单位的零弹性基础组件,或者先用两个弹性因子指定,以避免误解或无效声明。” - 尽管使用flex-grow和flex-shrink,原始代码应该基于该语句有效。该规范与MSDN一致并指出“必须将两个弹性系数之前的无单位零点解释为弹性因子。为避免误解或无效声明,作者必须指定一个零''flex-basis'组件与单位或先于两个弹性因子。“ - pwdst