Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CSS Grid dynamic columns auto-fit - gap between columns

Tags:

html

css

css-grid

I am trying youtube.com adaptive grid layout. I could achieve using CSS Grid. But if total number of cards are very less for example 2, card's width increasing to fit entire row. I could avoid this by setting max-width or width, but, gap betwwen cards changing when i change width of browser window.

How to set max-width without increasing the between cardds?

.grid-layout {
  padding: 0;
  margin: 0;
  list-style: none;
  border: 1px solid silver;
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(5rem, 1fr) );
}

.card {
  background: grey;
  height: 4rem;
  /* Uncommenting below line sets width but gap between card too high*/
  /* max-width: 7rem; */
  padding: 1px;
  margin: 0.5rem;
  line-height: 4rem;
  color: white;
  font-weight: bold;
  font-size: 2rem;
  text-align: center;
}
<section class="grid-layout">
    <div class="card">0</div>
    <div class="card">1</div>
    <!-- <div class="card">2</div>
    <div class="card">3</div>
    <div class="card">4</div>
    <div class="card">5</div>
    <div class="card">6</div>
    <div class="card">7</div>
    <div class="card">8</div>
    <div class="card">9</div>
    <div class="card">10</div>
    <div class="card">11</div>
    <div class="card">12</div>
    <div class="card">13</div>
    <div class="card">14</div>
    <div class="card">15</div>
    <div class="card">16</div>
    <div class="card">17</div>
    <div class="card">18</div>
    <div class="card">19</div> -->
  </section>
like image 368
Rajeshaz09 Avatar asked Sep 14 '25 05:09

Rajeshaz09


1 Answers

Use grid-gap with a value of percentage:

.grid-layout {
  list-style: none;
  border: 1px solid silver;
  display: grid;
  grid-gap: 20%;
  grid-template-columns: 1fr 1fr;
}

.card {
  background: grey;
  height: 8rem;
  padding: 1px;
  line-height: 8rem;
  color: white;
  font-weight: bold;
  font-size: 2rem;
  text-align: center;
}
<section class="grid-layout">
    <div class="card">0</div>
    <div class="card">1</div>
    <!-- <div class="card">2</div>
    <div class="card">3</div>
    <div class="card">4</div>
    <div class="card">5</div>
    <div class="card">6</div>
    <div class="card">7</div>
    <div class="card">8</div>
    <div class="card">9</div>
    <div class="card">10</div>
    <div class="card">11</div>
    <div class="card">12</div>
    <div class="card">13</div>
    <div class="card">14</div>
    <div class="card">15</div>
    <div class="card">16</div>
    <div class="card">17</div>
    <div class="card">18</div>
    <div class="card">19</div> -->
  </section>

Is this what you want?

like image 187
Arman Ebrahimi Avatar answered Sep 16 '25 20:09

Arman Ebrahimi