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