flex属性在IE中不起作用

Diz*_*izz 20 html css css3 flexbox internet-explorer-11

我一直无法确定为什么flexbox在IE 11中不起作用.

为了测试,我从CodePen中获取了一个非常简单的flexbox布局,并粘贴了以下信息.

Chrome按预期工作; IE11失败了.

在Chrome上运行的布局成功图像:

在此输入图像描述

IE11上布局失败的图像

在此输入图像描述

body {
  background: #333;
  font-family: helvetica;
  font-weight: bold;
  font-size: 1.7rem;
}

ul {
  list-style: none;
}

li {
  background: hotpink;
  height: 200px;
  text-align: center;
  border: 2px solid seashell;
  color: seashell;
  margin: 10px;
  flex: auto;
  min-width: 120px;
  max-width: 180px;
}

.flex {
  display: flex;
  justify-content: flex-start;
  flex-wrap: wrap;
}
Run Code Online (Sandbox Code Playgroud)
<ul class="flex">
  <li>1</li>
  <li>2</li>
  <li>3</li>
  <li>4</li>
  <li>5</li>
  <li>6</li>
  <li>7</li>
  <li>8</li>
  <li>9</li>
  <li>10</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

http://codepen.io/hankthewhale/pen/IdKkB?editors=110

Mic*_*l_B 43

IE在解析flex属性时遇到问题.

以下是一些对我有用的解决方法:

  • 使用长手属性而不是速记.

    而不是这样的事情:flex: 0 0 35%.

    试试这个:

    • flex-grow: 0
    • flex-shrink: 0
    • flex-basis: 35%


  • 小心百分比和无单位值 flex-basis

    这可能取决于您的IE11版本.行为似乎有所不同.

    试试这些变化:

    • flex: 1 1 0
    • flex: 1 1 0px
    • flex: 1 1 0%

谨防!某些css minifiers将替换0px0,这可能是一个非常烦人的调试(但是,它们不会0%因某些原因而改变).

更多细节在这里:


  • 而不是flex: 1使用flex: auto(或添加flex-basis: auto)

    如果您使用flex: 1flex-direction: row(如大屏幕),并切换到flex-direction: column在媒体查询(假设为移动设备),你可能会发现你的Flex项目崩溃.

    在媒体查询中,添加flex-basis: auto.这将覆盖规则中的flex-basisflex: 1(通常0,0px或者0%,取决于浏览器).

    使用flex: auto也应该工作,这是:

    • flex-grow: 1
    • flex-shrink: 1
    • flex-basis: auto

  • 使用旧时尚width/ height属性而不是flex.

  • 这个答案是金!:D 谢谢。 (2认同)

Emb*_*ugs 8

对我来说,使用

  flex: 1 1 auto;
Run Code Online (Sandbox Code Playgroud)

代替

  flex: 1;
Run Code Online (Sandbox Code Playgroud)

解决了IE 11上的flex问题.