Search code examples
htmlcsscss-multicolumn-layout

How to remove gap in second column of a CSS grid?


I'm having difficulties in my simple CSS column. Here's what it looks like:

enter image description here

HTML:

<div class="catalogue-container">

    <div class="catalogue-item">
        <img src="blabla.jpg" />
    </div>

    <div class="catalogue-item">
        <img src="blabla2.jpg" />
    </div>

    <div class="catalogue-item">
        <img src="blabla3.jpg" />
    </div>

    <div class="catalogue-item">
        <img src="blabl4.jpg" />
    </div>

</div>

CSS:

.catalogue-container {
    -webkit-column-count: 2;
    -webkit-column-gap: 7px;
    column-count: 2;
    column-gap: 7px;
    width: 100%;
    margin: 0 auto;
}

.catalogue-item {
    margin-bottom: 7px;
    padding: 0;
}

My reference: https://codepen.io/gsarig/pen/iqhfl

I want to remove the gap and move the items from the second column to the top.

Am I missing something here?


Solution

  • The problem could be caused by div wrapping when using column, you can try adding display: inline-block to .catalogue-item to avoid it.

    Try the following with & without display: inline-block:

    .catalogue-container {
      -webkit-column-count: 2;
      -webkit-column-gap: 7px;
      column-count: 2;
      column-gap: 7px;
      width: 100%;
      margin: 0 auto;
    }
    
    .catalogue-item {
      margin-bottom: 7px;
      padding: 0;
      border:1px solid black;
      display: inline-block;
      width: 100%;
    }
    <div class="catalogue-container">
    
      <div class="catalogue-item">
        <img src="blabla.jpg" style="height: 300px; display: block;"/>
      </div>
    
      <div class="catalogue-item">
        <img src="blabla2.jpg" style="height: 190px; display: block;"/>
      </div>
    
      <div class="catalogue-item">
        <img src="blabla3.jpg" style="height: 200px; display: block;"/>
      </div>
    
      <div class="catalogue-item">
        <img src="blabl4.jpg" style="height: 250px; display: block;"/>
      </div>
    
    </div>