May I suggest you use background-image and background-size: cover. That will ensure that no matter the image is wider or higher, it will always fill the div, all rendered in the same visual size, with its aspect ratio kept.
This can be done with the img element too, though as its browser support is less good, I chose not to.
html, body {
margin: 0;
width: 100vw;
}
.media-object {
display: flex;
flex-wrap: wrap;
}
.media-object-section {
width: calc(25vw - 4px); /* 4px equal margin on each side */
height: calc(25vw - 4px);
margin: 2px;
background-size: cover;
background-position: center;
}
.media-object-section.img1 {
background-image: url('http://lorempixel.com/200/200/animals/1');
}
.media-object-section.img2 {
background-image: url('http://lorempixel.com/300/200/animals/2');
}
.media-object-section.img3 {
background-image: url('http://lorempixel.com/200/300/animals/3');
}
.media-object-section.img4 {
background-image: url('http://lorempixel.com/400/400/animals/4');
}
<div class="media-object">
<div class="media-object-section middle img1">
</div>
<div class="media-object-section middle img2">
</div>
<div class="media-object-section middle img3">
</div>
<div class="media-object-section middle img4">
</div>
<div class="media-object-section middle img2">
</div>
<div class="media-object-section middle img3">
</div>
<div class="media-object-section middle img4">
</div>
<div class="media-object-section middle img1">
</div>
</div>
Update based on comment
Here is a none flex solution
html, body {
margin: 0;
width: 100vw;
}
.media-object-section {
display: inline-block;
width: calc(25vw - 4px); /* 4px margin on eachside */
height: calc(25vw - 4px);
margin: 2px -2px -2px 2px; /* -2px to compensate for white-space */
background-size: cover;
background-position: center;
}
.media-object-section.img1 {
background-image: url('http://lorempixel.com/200/200/animals/1');
}
.media-object-section.img2 {
background-image: url('http://lorempixel.com/300/200/animals/2');
}
.media-object-section.img3 {
background-image: url('http://lorempixel.com/200/300/animals/3');
}
.media-object-section.img4 {
background-image: url('http://lorempixel.com/400/400/animals/4');
}
<div class="media-object">
<div class="media-object-section middle img1">
</div>
<div class="media-object-section middle img2">
</div>
<div class="media-object-section middle img3">
</div>
<div class="media-object-section middle img4">
</div>
<div class="media-object-section middle img2">
</div>
<div class="media-object-section middle img3">
</div>
<div class="media-object-section middle img4">
</div>
<div class="media-object-section middle img1">
</div>
</div>
Note: The -2px to compensate for white-space can be solved other ways. Check this post for more info