Столбец Flex-direction делает элементы Flex перекрывающимися IE11

Я столкнулся с проблемой с использованием flexbox в IE11. Когда используешь flex-direction: column Flex-элементы перекрываются:

введите описание изображения здесь

В других браузерах (chrome, safari) это выглядит так:

введите описание изображения здесь

Это CSS:

.container {
  display: flex; 
  flex-direction: column;
}

.flex {
  flex: 1 1 0%;
}

И это HTML:

<div class="container">
  <div class="flex">
    Hello
  </div>
  <div class="flex">
    World
  </div>
</div>

Я сделал кодовую ручку, чтобы продемонстрировать проблему:

http://codepen.io/csteur/pen/XMgpad

Чего мне не хватает, чтобы этот макет не перекрывался в IE11?

3 ответа

Решение

Это вызвано%0 в классе

.flex {
  flex: 1 1 auto;
}

измените его на авто, тогда это не должно быть проблемой

Вместо flex: 1 1 0%; использование flex: 1 1 auto;

.container {
  display: flex; 
  flex-direction: column;
}

.flex {
  flex: 1 1 auto;
}
<div class="container">
  <div class="flex">
    Hello
  </div>
  <div class="flex">
    World
  </div>
</div>

Мое конкретное решение этой проблемы состояло в том, что мне нужно было явно установить ширину содержащего элемента. поскольку flex установлен в column IE11 автоматически расширит ширину контейнера, чтобы вместить содержимое дочерних элементов (помните, что гибкие блоки переворачиваются по бокам в column выравнивание, чтобы при переполнении они росли горизонтально, а не вертикально).

Так что мой код будет выглядеть так:

.container {
  display: flex; 
  flex-direction: column;
  width: 100%; // needs explicit width
}

.flex {
  flex: 1 1 auto; // or whatever
}

Была похожая проблема с IE11 и flex-direction: column-reverseЯ изменил, чтобы использовать CSS order собственность вместо flex-direction,

Отметим также, что flex: 1; компилируется в flex : 1 1 0%;, поэтому лучше (для пользователей IE), если вы явно напишете flex: 1 1 auto;, как уже упоминалось выше.

Другие вопросы по тегам