Подтвердить что ты не робот

Internet Explorer - Flexbox Коэффициент изображения

Следующая скрипка правильно показывает соотношение изображений в Chrome/Firefox.

Однако в Internet Explorer изображения (которые должны быть квадратными) сохраняют свою первоначальную высоту в макете flexbox при изменении размера в соответствии с их контейнером.

http://jsfiddle.net/minlare/knyagjk5/

<section>
<article>
    <div class="details">
        <img src="http://i.ytimg.com/vi/rb8Y38eilRM/maxresdefault.jpg" alt="face"/>
        <h4>Name</h4>
        <div class="description">
            <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a ultrices lectus. Curabitur molestie volutpat mattis.</p>
        </div>
    </div>
</article>
<article>
    <div class="details">
        <img src="http://i.ytimg.com/vi/rb8Y38eilRM/maxresdefault.jpg" alt="face"/>
        <h4>Name</h4>
        <div class="description">
            <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a ultrices lectus. Curabitur molestie volutpat mattis. Fusce fermentum auctor mauris, auctor lacinia mauris ornare faucibus.</p>
        </div>
    </div>
</article>
</section>

section{
    display: -webkit-box;
    display: -webkit-flex;
    display: -moz-box;
    display: -ms-flexbox;
    display: flex;

    -webkit-flex-wrap: wrap;
    -moz-flex-wrap: wrap;
    -ms-flex-wrap: wrap;
    flex-wrap: wrap;
}
article{
    display: -webkit-box;
    display: -webkit-flex;
    display: -moz-box;
    display: -ms-flexbox;
    display: flex;

    -webkit-box-flex: 1;
    -webkit-flex-grow: 1;
    -moz-flex-grow: 1;
    -ms-flex-positive: 1;
    flex-grow: 1;

    -webkit-box-align: stretch;
    -ms-flex-align: stretch;
    -webkit-align-items: stretch;
    -moz-align-items: stretch;
    align-items: stretch;

    width: 50%;
    padding-left: 10px;
    padding-right: 10px;
    margin-bottom: 20px;
    box-sizing: border-box;
}
.details{
    display: -webkit-box;
    display: -webkit-flex;
    display: -moz-box;
    display: -ms-flexbox;
    display: flex;

    -webkit-box-direction: normal;
    -webkit-box-orient: vertical;
    -webkit-flex-direction: column;
    -moz-flex-direction: column;
    -ms-flex-direction: column;
    flex-direction: column;

    width: 100%;
    border: 1px solid #666;
}
.image{
    width: 100%;
    max-width: 100%;
}
img{
    width: 100%;
    max-width: 100%;
    height: auto;
}
h4{
    padding: 10px;
    margin-bottom: 0;
}
.description{
    -webkit-box-flex: 1;
    -webkit-flex-grow: 1;
    -moz-flex-grow: 1;
    -ms-flex-positive: 1;
    flex-grow: 1;
}

Как это можно предотвратить/зафиксировать?

4b9b3361

Ответ 1

Причиной этого является известная документированная ошибка, в которой IE10 и IE11 не всегда сохраняли внутренние коэффициенты. И причина, по которой он работает в IE10 в соответствии с комментарием @gaynorvader, заключается в том, что значение по умолчанию для "flex" в IE10 было 0 0 auto скорее, чем конечная спецификация 0 1 auto. Это означает, что в IE10 ваше изображение рассматривается как flex-grow: 0, как описано далее в flexbug 6

Исправлено здесь, чтобы установить ваше изображение как flex: none; в соответствии с: http://jsfiddle.net/hexalys/knyagjk5/12/ или добавить дополнительный контейнер вокруг него. Но я бы посоветовал не создавать флеш-элементы вообще, если вам это действительно не нужно. В этом случае ваш контейнер article уже является гибким элементом, поэтому я не думаю, что вам нужно сделать другой вложенный гибкий элемент из класса .details. Это кажется ненужным.

Ответ 2

Добавьте один бит CSS:

img {
  min-height: 1px;
}

http://jsfiddle.net/mblase75/3Lb5f8pe/

Честно говоря, мне хотелось бы знать, почему это работает. В свете ответа hexalys, я полагаю, это заставляет IE пересчитывать отношения высоты/ширины. (В любом случае я применил это к своему собственному коду только сейчас, где затронутый элемент является меткой вместо изображения, и там тоже работал).