根据flexbox specs的规定,span flex项(flex容器的子项)应转换为display:block
Internet Explorer 10不应用此转换,因此flexbox不适用于span(内联)元素。
我的意思是
我可以只使用divs,但我想知道这是否是一个浏览器错误,是否有比更改html代码更好的修复方法。

最佳答案

这仅仅是因为(工作草案)flexbox规范在IE10发布后发生了变化。
这是CSS工作草案中的相关规范文本块,因为它在2012年底发布时就存在:
flex布局算法对flex项生成的框进行操作。以下每一项都成为弹性项:

[...]

四。一个匿名块,包装在连续运行的非替换内联子元素周围。
来源:http://www.w3.org/TR/2012/WD-css3-flexbox-20120612/#flex-items
Aspan是一个“未替换的内联子元素”。因此IE10将span(和任何相邻的内联内容)包装在一个匿名块(与旧规范匹配)中,而不是将其转换为一个块(根据新规范)。
我怀疑微软不想在发布后更改此功能,以避免破坏已经编码为预期IE10中特定行为的内容。
因此,如果您想编写在IE10和更新浏览器版本中都能工作的flexbox内容,最好不要依赖于这种特定的行为。(要明确;将这些跨距更改为div,或者给它们display:block,因为您知道它们无论如何都将在较新的浏览器中转换为块。)

10-06 15:05