Development Web

Simple, Responsive CSS Grid Page Layout

June 25, 2019
Simple, Responsive CSS Grid Page Layout

I’ve laid pages out many dif­fer­ent ways, but my favorite is using CSS grid along with a few oth­er tricks. The exam­ple below is vanil­la HTML/CSS; how­ev­er, the con­cept can be adapt­ed to any SPA framework.

Before going into the full exam­ple, I’ll point out a few inter­est­ing tidbits.

body {
  min-height: 100vh;
  margin: 0;
  display: grid;
}

This ensures the body occu­pies the full screen height, allow­ing us to stick the page foot­er to the bot­tom if the con­tent isn’t tall enough to push it off­screen. The vh unit is view height” and 100vh means 100% of the view height.”

.app {
  display: grid;
  grid-template-rows:
    [header-start]
      min-content
    [header-end content-start side-start]
      1fr
    [content-end side-end footer-start]
      min-content
    [footer-end];

  grid-template-columns:
    [header-start content-start footer-start]
      auto
    [content-end side-start]
      300px
    [side-end header-end footer-end];
}

The above sets up the page with a grid, nam­ing each line of the grid (names fall nice­ly between the [ ] brack­ets). In the full exam­ple, you will see how we restruc­ture the grid through media queries. As long as all of our line names are present, the page will reflow seam­less­ly, offer­ing a clean entry point into high-lev­el, respon­sive design.

.header {
  // ...
  grid-row: header-start / header-end;
  grid-column: header-start / header-end;
  // ...
}

The above allows us to define what part of the grid the head­er should occu­py using the named lines from the grid definition.

.header {
  // ...
  position: sticky;
  top: 0;
  // ...
}

The above approach allows the head­er to remain at the top of the page when scrolling. You can choose a dif­fer­ent val­ue for top to get it to stick to a dif­fer­ent point. The ben­e­fit of position: sticky over fixed or absolute is that it allows the head­er to con­tin­ue to be a part of the lay­out of the grid. With some­thing like position: fixed you would need to add some top mar­gin to the con­tent to com­pen­sate for the height of the head­er. Less than ideal.

.content {
  padding: 20px;
  grid-row: content-start / content-end;
  grid-column: content-start / content-end;

  background: green;

  display: grid;
  grid-template-columns: repeat(auto-fill, 500px);
  grid-template-rows: 300px;

  grid-auto-columns: 500px;
  grid-auto-rows: 300px;

  grid-auto-flow: dense;

  grid-row-gap: 20px;
  grid-column-gap: 20px;

  justify-content: center;
}

The above is sim­ply a way to lay out the box­es to give the con­tent the nec­es­sary height.

And, final­ly, the full exam­ple is here.

Phone

Wide Screen

Nar­row Screen

Jeff Kloosterman
Jeff Kloosterman
Head of Client Services

Stay in the loop with our latest content!

Select the topics you’re interested to receive our new relevant content in your inbox. Don’t worry, we won’t spam you.

The Agile (Communication) Revolution
Business Process Team

The Agile (Communication) Revolution

September 27, 2019

There have been a number of recent articles documenting Airbus 737 Max failures. Coming from an aviation engineering background, I am fascinated by mainstream coverage of a world I inhabited for years. One article in particular caught my eye. Bloomberg ran a piece on Boeing’s practice of outsourcing aspects of software development to less costly developers in other countries; the implication being that the practice was partially to blame.

Read more
Working From Home: Lessons Learned From A Forced Experiment
Team

Working From Home: Lessons Learned From A Forced Experiment

March 19, 2021

Prior to the pandemic, WFH seemed like a frightening notion for many. Organizations wondered if employees could actually be productive working remote? Well, it’s been a year since our forced experiment first began and what has it taught us? …That it was great!…until it wasn’t.

Read more
Iulia Rontu to join leadership team at MichiganLabs
Team

Iulia Rontu to join leadership team at MichiganLabs

February 4, 2021

Iulia will be joining the leadership team at MichiganLabs effective Monday, February 8, 2021. Iulia has been with MichiganLabs for 2 years in May of this year. She is currently the UX Practice Lead where she helps define our user experience practice to help transform and delight our clients.

Read more
View more articles