DEV Community

Cover image for Learn how to use CSS Grid with a FREE tool CSS Grid Generator
Dan Vega
Dan Vega

Posted on • Edited on • Originally published at danvega.dev

Learn how to use CSS Grid with a FREE tool CSS Grid Generator

As someone who has been developing web applications for almost 20 years now, I have seen it all. I started in FrontPage, moved to Dreamweaver, nested tables inside of tables and learned how to float and clear fix everything.

While you won't see any awards for my designs on my bookshelf I am able to create some very nice simple and clean layouts. That said I have never really enjoyed it because it has always been a huge pain in the a$$. I have always felt like I was just hacking away until my layout looked almost like what I had in mind.

This is why when tools like CSS Grid & Flexbox came along I was beyond excited about the possibilities of creating clean layouts. I think if you combine these 2 technologies along with just how far JavaScript has come it is what has really got me excited about front end development these days.

While I have a pretty good understanding of CSS Grid at this point I know it can be a little bit confusing to get started. That is why I am really excited to share with you a new tool that I came across that I really think can help you out if you're trying to understand CSS Grid.

CSS Grid Generator by Sarah Drasner

CSS Grid Generator is a free tool created by the super talented Sarah Drasner. It is a visual design tool that allows you to create a basic grid layout and then copy the code that was used to create it. When you first open the tool you will be presented with a default layout but from here you can easily customize the layout to your needs.

CSS Grid Layout Example

When I am learning something I find the best way to learn is by building something practical with my shiny new toy. In this article, you are going to take a very simple layout and then use the CSS Grid Generator to create the code needed to use in a real project. This is the finished layout with a little bit of styling just so each section is apparent.

Now that you know what we are aiming for we can start building it out the layout. Start by updating the right hand side to the following.

  • Columns: 4
  • Rows: 3
  • Column Gap: 20
  • Row Gap: 20

The gaps allow us to have some margin between our content. I could have just used column gap but I wanted some margin after the header and before the footer so that is what the row gap is doing.

Next you will want to define the different areas of your application. In the CSS Grid Generator you can click and drag to create an area. You will want the header to span the entire grid, the sidebars to take up one cell, the main content area to span 2 columns and the footer to span 4 columns. If you do everything correctly you should end up with something that looks like this.

This is starting to look more like our layout but you still need to define some sizes of different things. You will notice an input box next to each row and column that you can use to set a specific size.

  • Header: 100px height
  • Sidebars: 200px width
  • Footer: 50px height

This is starting to look more like the layout we were going for but you might be asking what that 1fr unit is.

Tracks can be defined using any length unit. Grid also introduces an additional length unit to help us create flexible grid tracks. The new fr unit represents a fraction of the available space in the grid container.

The 1fr in 2nd row will tell that area to take up the rest of the available space. If you set the container to 100vh you can then have content that takes up the full page and same goes for the columns.

CSS Grid Generated Code

If you look under the columns and row inputs on the right hand side you will see a button that says "Please may I have some code", click it. You should see some generated code that looks something like this. Click the copy button to copy the code and then head over to a text editor.

.parent {
  display: grid;
  grid-template-columns: 200px 1fr 1fr 200px;
  grid-template-rows: 100px 1fr 50px;
  grid-column-gap: 20px;
  grid-row-gap: 20px;
  .div1 { grid-area: 1 / 1 / 2 / 5; }
  .div2 { grid-area: 2 / 1 / 3 / 2; }
  .div3 { grid-area: 2 / 2 / 3 / 4; }
  .div4 { grid-area: 2 / 4 / 3 / 5; }
  .div5 { grid-area: 3 / 1 / 4 / 5; }
}
Enter fullscreen mode Exit fullscreen mode

Create a new document simple-layout.htm and add the following code which will reset the margin and padding for the body.

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Simple Layout</title>
  <style>
    body {
      margin: 0;
      padding: 0;
    }
  </style>
</head>
<body>

</body>
</html>
Enter fullscreen mode Exit fullscreen mode

Next add in the CSS (the copied code was in SASS but you can pull the divs out)

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Simple Layout</title>
  <style>
    body {
      margin: 0;
      padding: 0;
    }
    .parent {
      display: grid;
      grid-template-columns: 200px 1fr 1fr 200px;
      grid-template-rows: 100px 1fr 50px;
      grid-column-gap: 20px;
      grid-row-gap: 20px;
      height: 100vh;
    }

    .div1 {
      grid-area: 1 / 1 / 2 / 5;
    }

    .div2 {
      grid-area: 2 / 1 / 3 / 2;
    }

    .div3 {
      grid-area: 2 / 2 / 3 / 4;
    }

    .div4 {
      grid-area: 2 / 4 / 3 / 5;
    }

    .div5 {
      grid-area: 3 / 1 / 4 / 5;
    }
  </style>
</head>
<body>

</body>
</html>
Enter fullscreen mode Exit fullscreen mode

What the tool gave you was the css needed to create this layout. You will need to add markup needed which by looking at the CSS is just a .parent with 5 .div nested. I am adding the text just so you can see each section.

<body>
  <div class="parent">
    <div class="div1">
      Header
    </div>
    <div class="div2">
      Left Sidebar
    </div>
    <div class="div3">
      Main Content
    </div>
    <div class="div4">
      Right Sidebar
    </div>
    <div class="div5">
      Footer
    </div>
  </div>

</body>
Enter fullscreen mode Exit fullscreen mode

Finally add the follow CSS that will just add some padding a background color for .div1 - .div5

div:not(.parent) {
  padding: 10px;
  background-color: rgb(199, 199, 199);
}
Enter fullscreen mode Exit fullscreen mode

If you were to run this you would end up with the following.

This looks pretty good but you want this to take up the entire browser window. An easy way to fix this is to add height: 100vh to the .parent class

.parent {
  display: grid;
  grid-template-columns: 200px 1fr 1fr 200px;
  grid-template-rows: 100px 1fr 50px;
  grid-column-gap: 20px;
  grid-row-gap: 20px;
  height: 100vh;
}
Enter fullscreen mode Exit fullscreen mode

With that, you have the layout you were looking for!

This tool is meant to help you create a basic layout in CSS Grid really fast. From here it will be up to you to go out and learn more about CSS Grid so that you can start customizing and creating advanced layouts.

Conclusion

The user interface of CSS Grid Generator is beautiful, clean and easy to use. I love that the entire project was written in Vue and hosted on Netlify, 2 of my favorite technologies.

If you're ever curious how a project like this is built you can pop open the source code and take a look (Thanks Sarah!). There is a nice SVG animation in the upper right hand side that will take you to the Github repository. I hope you found this tool as useful as I have, as always...

Happy Coding

Dan

This article was first posted on my blog at https://www.danvega.dev/blog. If you found this article interesting please consider subscribing to my newsletter or following me on Twitter.

Top comments (4)

Collapse
 
jlcanovas profile image
Javier Canovas

nice discovery, thks for sharing!

Collapse
 
scooperdev profile image
Stephen Cooper

Thanks for sharing this! Been meaning to start using CSS Grid and this was just the kickstart I needed.

Collapse
 
sanidz profile image
sanidz

it's lit!

Collapse
 
kct3937 profile image
kct3937

How about nested or sub grids? Have you tried anything like that?