Search code examples
htmlcsscss-grid

Difficulties to position my code with a grid


I need to create a dashboard and I have some trouble to position all my elements using grid-layout.

This is the organisation that my dashboard is suppose to have :

img  img  nb  nb  members
Projects  nb  nb  
Collab    Activities
Asign     

I initialize in my css code, a grid with 6 columns et 4 rows.

When I tried to set my elements using grid-column et grid-row, this is my result :

img nb projects nb collab Asign img nb nb
Members Activities

Here is my HTML code :

body
{
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  grid-template-rows: repeat(4, auto);
  grid-gap: 20px;
}

.box
{
  background: #333;
  color: #fff;
	border-color: #8000FF;
  padding: 20px;
}

.img {
	grid-column: span 2;
	grid-row: 1;
}

.projects {
	grid-column: span 1;
	grid-row: 1;
}

.nb {
	grid-column: span 2;
	grid-row: 1;
}

.members {
	grid-column: span 2;
	grid-row: 2;
}

.collab {
	grid-column: span 1;
	grid-row: 1;
}

.activities {
	grid-column: span 4;
	grid-row: 2;
}

.asign {
	grid-column: span 1;
	grid-row: 1;
}
		<div class="img box">
			<article class="box">
				Photo 1
			</article>
			<article class="box">
				Photo 2
			</article>
		</div>

		<div class="nb box">
			<article class="box">
				35
			</article>
			<article class="box">
				19
			</article>
		</div>

		<aside class="members box">
			Membres
		</aside>

		<div class="projects box">
			Accédez à vos projets
		</div>

		<div class="nb box">
			<article class="box">
				170
			</article>
			<article class="box">
				1
			</article>
		</div>

		<div class="collab box">
			Invitez vos collaborateurs
		</div>

		<div class="activities box">
			Activités
		</div>

		<div class="asign box">
			Assignez vos projets
		</div>

Any ideas from where the problem is ?


Solution

  • What you have there is NOT a 6 column grid - it seems to be a 3 column grid with each column split in two (based on your HTML).

    body {
      display: grid;
      grid-template-columns: repeat(3, 1fr);
      grid-template-rows: repeat(4, auto);
      grid-gap: 20px;
    }
    
    .box {
      background: #333;
      color: #fff;
      border-color: #8000FF;
      padding: 20px;
    }
    
    .img {
      grid-row: 1;
      display: flex;
    }
    
    .projects {
      grid-row: 2;
    }
    
    .nb-1 {
      grid-row: 1;
      display: flex;
    }
    
    .nb-2 {
      grid-column: 2;
      display: flex;
    }
    
    .members {
      grid-row: 1;
    }
    
    .collab {
      grid-row: 3;
    }
    
    .activities {
      grid-row: 3;
      // grid-column: span 2;
    }
    
    .asign {
      grid-row: 4;
    }
    <div class="img box">
      <article class="box">
        Photo 1
      </article>
      <article class="box">
        Photo 2
      </article>
    </div>
    
    <div class="nb-1 box">
      <article class="box">
        35
      </article>
      <article class="box">
        19
      </article>
    </div>
    
    <aside class="members box">
      Membres
    </aside>
    
    <div class="projects box">
      Accédez à vos projets
    </div>
    
    <div class="nb-2 box">
      <article class="box">
        170
      </article>
      <article class="box">
        1
      </article>
    </div>
    
    <div class="collab box">
      Invitez vos collaborateurs
    </div>
    
    <div class="activities box">
      Activités
    </div>
    
    <div class="asign box">
      Assignez vos projets
    </div>
    </div>