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;
}
Как это можно предотвратить/зафиксировать?
Ответы
Ответ 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 пересчитывать отношения высоты/ширины. (В любом случае я применил это к своему собственному коду только сейчас, где затронутый элемент является меткой вместо изображения, и там тоже работал).