trimItemImage($('.thumb')); function trimItemImage(elements, ratio) { elements.each(function() { var img = $('img', this); var ratio = '1:1'; if (/^\d+?:\d+$/.test($(this).data('ratio'))) { ratio = $(this).data('ratio'); } var dimensions = $.map(ratio.split(':'), Number); var width = dimensions[0]; var height = dimensions[1]; height = Math.floor(height * $(this).width() / width); $(this).css('height', height); var box_ratio = $(this).width() / height; var img_ratio = img.width() / img.height(); if (img_ratio > box_ratio) { $(img).css({ width: 'auto', height: '100%' }); } else { $(img).css({ width: '100%', height: 'auto' }); } }); }
<div class="wrap"> <div class="thumb-wrap"> <div class="thumb"> <img src="https://picsum.photos/300/200/?random" alt=""> </div> </div> <div class="thumb-wrap"> <div class="thumb"> <img src="https://picsum.photos/300/200/?random" alt=""> </div> </div> <div class="thumb-wrap"> <div class="thumb"> <img src="https://picsum.photos/300/200/?random" alt=""> </div> </div> <div class="thumb-wrap"> <div class="thumb"> <img src="https://picsum.photos/200/300/?random" alt=""> </div> </div> <div class="thumb-wrap"> <div class="thumb"> <img src="https://picsum.photos/200/300/?random" alt=""> </div> </div> <div class="thumb-wrap"> <div class="thumb"> <img src="https://picsum.photos/200/300/?random" alt=""> </div> </div> </div> <div class="wrap"> <div class="thumb-wrap"> <div class="thumb" data-ratio="16:9"> <img src="https://picsum.photos/300/200/?random" alt=""> </div> </div> <div class="thumb-wrap"> <div class="thumb" data-ratio="16:9"> <img src="https://picsum.photos/300/200/?random" alt=""> </div> </div> <div class="thumb-wrap"> <div class="thumb" data-ratio="16:9"> <img src="https://picsum.photos/300/200/?random" alt=""> </div> </div> <div class="thumb-wrap"> <div class="thumb" data-ratio="16:9"> <img src="https://picsum.photos/200/300/?random" alt=""> </div> </div> <div class="thumb-wrap"> <div class="thumb" data-ratio="16:9"> <img src="https://picsum.photos/200/300/?random" alt=""> </div> </div> <div class="thumb-wrap"> <div class="thumb" data-ratio="16:9"> <img src="https://picsum.photos/200/300/?random" alt=""> </div> </div> </div>
* { box-sizing: border-box; } .wrap { display: flex; flex-wrap: wrap; width: 500px; height: auto; margin-left: -10px; &:nth-of-type(n+2) { margin-top: 20px; } } .thumb-wrap { margin-bottom: 10px; padding-left: 10px; width: (100% / 3); .thumb { position: relative; overflow: hidden; img { display: inline-block; position: absolute; top: 50%; left: 50%; width: 100%; height: auto; max-width: none; transform: translate(-50%, -50%); vertical-align: middle; } } }