Ответ 1
Это, похоже, ошибка IE.
В соответствии со спецификацией flexbox:
8.1. Выравнивание с автоматическими полями
Перед выравниванием через
justify-content
иalign-self
любое положительное свободное пространство распространяется на автоматические поля в этом измерении.Примечание. Если свободное пространство распределяется по автоматическим полям, свойства выравнивания не будут иметь эффекта в этом измерении, потому что поля будут украдены все свободное пространство, оставшееся после сгибания.
Другими словами, автоматические поля имеют приоритет над justify-content
.
Фактически, если элемент имеет автоматические поля, то свойства выравнивания ключевых слов, такие как justify-content
и align-self
, не имеют эффекта (потому что автоматические поля заняли все пространство).
Ваш код работает как в Chrome, так и в Firefox, потому что эти браузеры соответствуют спецификации.
IE10 и IE11, похоже, не соответствуют требованиям. Они не применяют автоматическую маржу, как определено в спецификации.
(Обратите внимание, что IE10 построен на предыдущей версии спецификации.)
Решения
Способ №1: Использовать только автоматические поля
Если justify-content
удалено, автоматические поля отлично работают в IE10/11. Поэтому не используйте justify-content
. Используйте автоматические поля полностью. (См. Примеры выравнивания с автоматическими полями).
Метод № 2: используйте невидимый разделитель div
Создайте третий div с visibility: hidden
и flex-grow:1
. Это, естественно, сдвинет #first-item
и #second-item
на левый край, без необходимости автоматического поля.
#container {
display: flex;
flex-flow: row wrap;
justify-content: center;
align-items: center;
align-content: center;
}
#third-item {
flex-grow: 1;
visibility: hidden;
}
/* just some colors - not important */
#container {
height: 200px;
width: 100%;
background: pink;
}
#container > div {
background: cornflowerblue;
padding: 10px;
outline: 1px solid yellow;
}
<div id='container'>
<div id='first-item'>first item</div>
<div id='second-item'>second item</div>
<div id='third-item'>third item</div>
</div>