Search code examples
htmlcssimageflexboxobject-fit

Contain image size with parent <div>


I´ve been trying to keep my images next to each other on the same line, and just crop them to a smaller size if needed. Why doesn't object-fit work ?

HTML:

<div class="gallery">
  <div class="inner"><img src="images/image1.jpg"></div>
  <div class="inner"><img src="images/image2.jpg"></div>
  <div class="inner"><img src="images/image3.jpg"></div>
</div>

CSS:

.gallery{
  width: 1000px;
  height: 300px;
  display: flex;
}

.inner{
   width: 333px;
   height: 300px;
}

.inner img{
   object-fit: contain;
}

Solution

  • You should set the width and height on the img in order to use it with object-fit. And it looks like object-fit: cover; might be what you're after.

    img {
      width: 100%;
      height: 100%;
      object-fit: cover;
    }
    

    Full snippet:

    .gallery {
      width: 1000px;
      height: 300px;
      display: flex;
    }
    
    .inner {
      flex: 0 0 33.333333%;
      /*or flex: 1; */
      /*or width: 33.333333%; */
      height: 100%;
    }
    
    img {
      width: 100%;
      height: 100%;
      object-fit: cover;
    }
    <div class="gallery">
      <div class="inner"><img src="https://picsum.photos/300/300"></div>
      <div class="inner"><img src="https://picsum.photos/400/600"></div>
      <div class="inner"><img src="https://picsum.photos/600/400"></div>
    </div>