Search code examples
htmlcsscss-gridgrid-layout

How to spread image links out evenly using grid?


I have some images that link to their individual sites, but when I try to put them in a grid, they just stack on top of each other. I wrapped them in a div, and wrapped each picture, description, and price in their own div, so that each grid piece can organize the picture, its name, and its price.

.apparel {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  grid-gap: 1em;
}

.shirt-name {
  font-weight: 600;
}

.price {
  font-weight: 500;
}

.shirt-pic img {
  width: 100%;
  height: auto;
}
<div class="apparel">
  <div id="original" class="left-side">
    <a class="shirt-pic" href="pages/original.html"><img src="images/original.png" alt="Shirt 1" /></a>
    <span class="shirt-name helvetica size-s capitalized">Original</span>
    <span class="price helvetica size-s">&#36;20.00</span>
  </div>
  <div id="design1" class="right-side">
    <a class="shirt-pic" href="pages/design1.html"><img src="images/design1.png" alt="Shirt 2" /></a>
    <span class="shirt-name helvetica size-s capitalized">Design 1</span>
    <span class="price helvetica size-s">&#36;30.00</span>
  </div>
  <div id="design2" class="left-side">
    <a class="shirt-pic" href="pages/design2.html"><img src="images/design2.png" alt="Design 2" /></a>
    <span class="shirt-name helvetica size-s capitalized">Design 2</span>
    <span class="price helvetica size-s">&#36;30.00</span>
  </div>
  <div id="tri-tone" class="right-side">
    <a class="shirt-pic" href="pages/tri-tone.html"><img src="images/tri-tone.png" alt="Tri Tone" /></a>
    <span class="shirt-name helvetica size-s capitalized">Tri-Tone</span>
    <span class="price helvetica size-s">&#36;40.00</span>
  </div>
</div>

Also does grid work if I use span instead of divs? And how would I make sure that the price and name is centered under the picture?


Solution

  • Just use flex for the center:

    .apparel {
      display: grid;
      grid-template-columns: repeat(2, 1fr);
      grid-gap: 1em;
      text-align: center;
    }
    
    .shirt-name {
      font-weight: 600;
      display: flex;
      justify-content: center;
      align-items: center;
    }
    
    .price {
      font-weight: 500;
    }
    
    .shirt-pic img {
      width: 50px;
      height: 50px;
    }
    <div class="apparel">
      <div id="original" class="left-side">
        <a class="shirt-pic" href="pages/original.html"><img src="http://placekitten.com/301/301" alt="Shirt 1" /></a>
        <span class="shirt-name helvetica size-s capitalized">Original</span>
        <span class="price helvetica size-s">&#36;20.00</span>
      </div>
      <div id="design1" class="right-side">
        <a class="shirt-pic" href="pages/design1.html"><img src="http://placekitten.com/301/301" alt="Shirt 2" /></a>
        <span class="shirt-name helvetica size-s capitalized">Design 1</span>
        <span class="price helvetica size-s">&#36;30.00</span>
      </div>
      <div id="design2" class="left-side">
        <a class="shirt-pic" href="pages/design2.html"><img src="http://placekitten.com/301/301" alt="Design 2" /></a>
        <span class="shirt-name helvetica size-s capitalized">Design 2</span>
        <span class="price helvetica size-s">&#36;30.00</span>
      </div>
      <div id="tri-tone" class="right-side">
        <a class="shirt-pic" href="pages/tri-tone.html"><img src="http://placekitten.com/301/301" alt="Tri Tone" /></a>
        <span class="shirt-name helvetica size-s capitalized">Tri-Tone</span>
        <span class="price helvetica size-s">&#36;40.00</span>
      </div>
    </div>