Search code examples
htmlcsscss-grid

CSS Grid matching heights


I am having some issues with CSS grid (i think).

The left-hand side of my grid won't match the height on the other side. There always seems to be a gap at the bottom of the big image.

I need the grid all to be equal heights and 4/3 aspect ratio.

Any ideas? Thanks

body {
  padding: 40px;
}

* {
  margin: 0px;
  padding: 0px;
}

.grid-gallery {
  list-style: none;
  display: grid;
  grid-template-columns: 2fr 1fr 1fr;
  grid-template-rows: 1fr 1fr;
  gap: 1rem;
}

.grid-gallery-item:first-child {
  grid-row: span 2;
}

img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  aspect-ratio: 4 / 3;
}
<div class="grid-gallery">
  <div class="grid-gallery-item">
    <button>
      <img src="https://via.placeholder.com/400" />
    </button>
  </div>
  
   <div class="grid-gallery-item">
    <button>
      <img src="https://via.placeholder.com/400" />
    </button>
  </div>
  
   <div class="grid-gallery-item">
    <button>
      <img src="https://via.placeholder.com/400" />
    </button>
  </div>
  
   <div class="grid-gallery-item">
    <button>
      <img src="https://via.placeholder.com/400" />
    </button>
  </div>
  
   <div class="grid-gallery-item">
    <button>
      <img src="https://via.placeholder.com/400" />
    </button>
  </div>
</div>


Solution

  • Your buttons need to have the same size as the images

    body {
      padding: 40px;
    }
    
    * {
      margin: 0px;
      padding: 0px;
    }
    
    .grid-gallery {
      list-style: none;
      display: grid;
      grid-template-columns: 2fr 1fr 1fr;
      grid-template-rows: 1fr 1fr;
      gap: 1rem;
    }
    
    .grid-gallery-item:first-child {
      grid-row: span 2;
    }
    
    button {
      width: 100%;
      height: 100%;
    }
    
    img {
      display: block;
      width: 100%;
      height: 100%;
      object-fit: cover;
      aspect-ratio: 4 / 3;
    }
    <div class="grid-gallery">
      <div class="grid-gallery-item">
        <button>
          <img src="https://via.placeholder.com/400" />
        </button>
      </div>
    
      <div class="grid-gallery-item">
        <button>
          <img src="https://via.placeholder.com/400" />
        </button>
      </div>
    
      <div class="grid-gallery-item">
        <button>
          <img src="https://via.placeholder.com/400" />
        </button>
      </div>
    
      <div class="grid-gallery-item">
        <button>
          <img src="https://via.placeholder.com/400" />
        </button>
      </div>
    
      <div class="grid-gallery-item">
        <button>
          <img src="https://via.placeholder.com/400" />
        </button>
      </div>
    </div>