Search code examples
cssgrid-layoutcss-gridresponsive-images

How to utilize responsive images using CSS Grid Layout


Ive been working with the new CSS Grid Layout and one thing I can't seem to find much info on is how to make images responsive?? I've tried using media queries and setting the image width to 100% but the image still overflows outside of the grid. What am I missing?


Solution

  • You can use below concept :

    function getRandomSize(min, max) {
      return Math.round(Math.random() * (max - min) + min);
    }
    
    var allImages = "";
    
    for (var i = 0; i < 25; i++) {
      var width = getRandomSize(200, 400);
      var height =  getRandomSize(200, 400);
      allImages += '<img src="https://placekitten.com/'+width+'/'+height+'" alt="pretty kitty">';
    }
    
    $('#photos').append(allImages);
    #photos {
       /* Prevent vertical gaps */
       line-height: 0;
       
       -webkit-column-count: 5;
       -webkit-column-gap:   0px;
       -moz-column-count:    5;
       -moz-column-gap:      0px;
       column-count:         5;
       column-gap:           0px;
    }
    
    #photos img {
      /* Just in case there are inline attributes */
      width: 100% !important;
      height: auto !important;
    }
    
    @media (max-width: 1200px) {
      #photos {
      -moz-column-count:    4;
      -webkit-column-count: 4;
      column-count:         4;
      }
    }
    @media (max-width: 1000px) {
      #photos {
      -moz-column-count:    3;
      -webkit-column-count: 3;
      column-count:         3;
      }
    }
    @media (max-width: 800px) {
      #photos {
      -moz-column-count:    2;
      -webkit-column-count: 2;
      column-count:         2;
      }
    }
    @media (max-width: 400px) {
      #photos {
      -moz-column-count:    1;
      -webkit-column-count: 1;
      column-count:         1;
      }
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <section id="photos"></section>