IE10–IE11不支持现代Flex布局,需用-ms-flexbox前缀并放弃flex-wrap等属性,改用inline-block模拟,且必须成对声明标准与旧语法属性。

Flex布局在IE10–IE11中不是“失效”,而是根本没加载现代Flex引擎——只写display: flex等于没写,必须配对display: -ms-flexbox,否则整个容器退化为普通block。
IE10/IE11里flex-wrap: wrap完全不生效
DevTools里该属性被划掉,控制台无报错,是因为IE10/11压根没实现这个属性。连-ms-flex-wrap: wrap也无效,浏览器直接忽略整条声明。
- 必须放弃
flex-wrap,改用display: inline-block模拟:父容器加font-size: 0消除空白间隙 - 子项宽度用
calc(33.333% - 2px)这类带减法的表达式,避免整数百分比(如33%)引发累计误差 - 若子项有
border或padding,必须在calc()中一并减去,例如width: calc(50% - 12px)
justify-content和align-items在IE中没反应
IE10/11认的是旧草案语法:justify-content: center对应-ms-flex-pack: center,align-items: center对应-ms-flex-align: center。只写标准属性,IE会当它不存在。
- 必须成对声明:
display: -ms-flexbox; display: flex; -
-ms-flex-pack支持center、distribute(对应space-between)、justify(对应space-around),但不支持space-evenly -
-ms-flex-align值与标准一致(stretch、center、flex-start等),但baseline在IE11中表现不稳定,慎用
flex: 1导致子项坍缩或换行错乱
IE10把flex: 1解析为flex: 1 1 0%,IE11则解析为flex: 1 1 auto,结果都是子项宽度失控、换行失效。
立即学习“前端免费学习笔记(深入)”;
- 禁用
flex: 1,改用显式值:flex: 0 0 33.333%(小数点不能省)、flex: 0 0 50% - 父容器必须设明确高度(如
height: 100vh或min-height: 200px),子项移除height/max-height - 若需等高拉伸,用
-ms-flex-positive: 1代替flex-grow: 1,但仅限单行场景;多行请改用display: table-cell兜底
真正麻烦的不是写多少前缀,而是IE10/11对flex-basis: content、align-content、flex-wrap: wrap-reverse这些属性完全不识别,且Autoprefixer v10+已停止生成-ms-映射——这些地方只能手动补全,或直接切到float/table-cell方案。


















