На другому зображенні виглядає так, ніби ви хочете, щоб зображення заповнило поле, але створений вами приклад НЕ зберігає пропорції (домашні тварини виглядають нормально, а не худенькими чи товстими).
Я не маю уявлення, чи фотографували ви ці зображення як приклад, або другий - це також "як має бути" (ви сказали Є, тоді як у першому прикладі ви сказали "повинен")
У будь-якому випадку, я повинен припустити:
Якщо "розміри зображень не змінюються, зберігаючи пропорції", і ви показуєте мені зображення, яке НЕ зберігає пропорцію пікселів, я повинен припустити, що ви намагаєтесь виконати співвідношення сторін області "обрізання" (внутрішня частина зелений) WILE, зберігаючи пропорції пікселів. Тобто ви хочете заповнити клітинку зображенням, збільшивши та обрізавши зображення.
Якщо це ваша проблема, код, який ви надали, відображає НЕ "вашу проблему", а ваш початковий приклад.
З огляду на попередні два припущення, те, що вам потрібно, не можна досягти за допомогою фактичних зображень, якщо висота поля динамічна, а за допомогою фонових зображень. Або за допомогою "фонового розміру: містити", або цих методів (розумні відступи у відсотках, які обмежують обрізку або максимальні розміри де завгодно):
http://fofwebdesign.co.uk/template/_testing/scale-img/scale- img.htm
Єдиний спосіб, коли це можливо з зображеннями, це якщо ми ЗАБУДЕМО про ваше друге зображення, і клітинки мають фіксовану висоту, і, НА ЖАЛІ, судячи з ваших зразків зображень, висота залишається незмінною!
Отже, якщо висота вашого контейнера не змінюється, і ви хочете зберегти свої зображення квадратними, вам просто потрібно встановити максимальну висоту зображень до цього відомого значення (мінус відступи або межі, залежно від властивості розміру коробки в клітини)
Подобається це:
<div class="content">
<div class="row">
<div class="cell">
<img src="http://lorempixel.com/output/people-q-c-320-320-2.jpg"/>
</div>
<div class="cell">
<img src="http://lorempixel.com/output/people-q-c-320-320-7.jpg"/>
</div>
</div>
</div>
І CSS:
.content {
background-color: green;
}
.row {
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
-webkit-box-orient: horizontal;
-moz-box-orient: horizontal;
box-orient: horizontal;
flex-direction: row;
-webkit-box-pack: center;
-moz-box-pack: center;
box-pack: center;
justify-content: center;
-webkit-box-align: center;
-moz-box-align: center;
box-align: center;
align-items: center;
}
.cell {
-webkit-box-flex: 1;
-moz-box-flex: 1;
box-flex: 1;
-webkit-flex: 1 1 auto;
flex: 1 1 auto;
padding: 10px;
border: solid 10px red;
text-align: center;
height: 300px;
display: flex;
align-items: center;
box-sizing: content-box;
}
img {
margin: auto;
width: 100%;
max-width: 300px;
max-height:100%
}
http://jsfiddle.net/z25heocL/
Ваш код недійсний (відкриваючі теги замість закриття, тому вони виводять NESTED комірки, а не братів і сестер, він використав SCREENSHOT ваших зображень всередині несправного коду, а поле flex не містить клітинки, а обидва приклади в стовпці ( ви встановили "рядок", але пошкоджений код, що вкладає одну клітинку всередину іншої, привів до гнучкості всередині флексу, нарешті, працюючи як СТОПЦИ. Я не уявляю, що ви хотіли виконати і як ви придумали цей код, але я м, здогадуючись, що ти хочеш, це це.
Я також додав display: flex до клітинок, тому зображення стає центрованим (я думаю, display: table
міг би бути використаний тут і з усією цією розміткою)