IE11 flexbox max-width и margin: auto;
У меня есть простой контейнер flexbox с двумя элементами:
<div id='container'>
<div id='first-item'>first item</div>
<div id='second-item'>second item</div>
</div>
Первый элемент имеет flex-grow: 1 и max-width до 200px. Второй элемент имеет margin-left: auto; для выравнивания справа к контейнеру:
#container {
display: flex;
}
#first-item {
max-width: 200px;
flex: 1;
}
#second-item {
margin-left: auto;
}
Вот рабочая демонстрация:
http://jsfiddle.net/c81oxdg9/2/
Я хочу, чтобы первый элемент был выровнен слева и имел некоторую максимальную ширину. И второй элемент будет выровнен правильно.
Прекрасно работает в Chrome, Firefox и даже в IE10, но не в IE11.
В IE11 второй элемент выталкивается из контейнера.
Как исправить это для IE11? Я пропустил какое-то свойство?
Ответы
Ответ 1
Я нашел ответ, который, кажется, работает (хотя я признаю, что не тестировал его в IE 10): я добавил width: 100%
к элементу, нуждающемуся в выравнивании. Отлично работает в IE.
Возможно, слишком поздно, чтобы помочь вам, но, возможно, кому-то понадобится решение.
Ответ 2
У меня была та же проблема с
display: flex;
-ms-flex: 1;
max-width: 300px;
в сочетании с
margin: 0 auto;
для дочерних элементов. Они выталкиваются из контейнера div.
Однако, я решил это с помощью try и error и чтения
https://github.com/philipwalton/flexbugs#11-min-and-max-size-declarations-are-ignored-when-wrapping-flex-items
и
Flexbox Проблемы с шириной IE10
Наконец, я решил это с заменой
-ms-flex: 1;
с
-ms-flex: 1 0 auto;
Остерегайтесь. Это работает только в том случае, если вам действительно нужна максимальная ширина внутри столбцов flex. иначе он будет выглядеть как display: block.
Ответ 3
В моем случае у меня было что-то вроде:
HTML:
<div class='my-flexbox'>
<div class='wrapper'>
<div class='content'>
<!-- ... -->
</div>
</div>
</div>
CSS
.my-flexbox {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
}
.wrapper {
padding: 16px;
margin: auto;
max-width: 90%;
min-width: 40%;
}
.content
не имеет фиксированной ширины (или высоты) любого типа, но вместо этого содержит комбинацию встроенных элементов и элементов блока.
Я хотел, чтобы мой контент выглядел по центру и по горизонтали, но относился к max-width
и max-height
от .wrapper
. Указание justify-content: center;
на .my-flexbox
вытолкнуло содержимое с экрана вправо (кажется мне ошибкой), а align-items: center;
не повлияло (насколько мне известно, это поведение по умолчанию).
Вместо решение должно было добавить align-self: center;
в .wrapper
.
Почему это имеет какой-то смысл вне меня. Предположительно, это всего лишь ошибка для flexbox в IE11.