Search code examples
htmlcsscss-grid

Creating a grid layout with one square being scrollable?


Trying to create the following layout using the CSS Grid where only the main element should be scrollable.

  <header>header</header>
  <div>
    <aside></aside>
    <main>
    </main>
  </div>
  <footer>footer</footer>

This is a stackblitz: https://stackblitz.com/edit/web-platform-p4nanm?file=index.html,styles.css

And this is the current CSS attempt:

body {
  height: 100vh;
  display: grid;
  grid-template-columns: 1fr;
  grid-template-rows: auto 1fr auto;
  padding: 0px;
  margin: 0px;
}

header {
  background-color: gold;
}
div {
  display: grid;
  grid-template-columns: auto 1fr;
  grid-template-rows: 1fr;
  background-color: burlywood;
  overflow: hidden;
}
aside {
  max-width: 10rem;
}
main {
  display: grid;
  grid-template-columns: 1fr;
  grid-template-rows: 1fr;
  overflow: auto;
}
footer {
  background-color: aqua;
}

p {
  background-color: lightgreen;
}

main p {
  background-color: gray;
}

The "Weird" thing is that if I add:

  overflow: auto;

To the aside element CSS rule, then both the aside and the main element will scroll, and work the way I would expect.

But if the overflow: auto; rule is removed from the aside then most of the content within the main element goes away and it also does not scroll.

How can we make it so that only the main element scrolls?


Solution

  • The solution will be set to aside { min-height: 0; }, because by default it has auto and does not shrink from it. Or any overflow value other than visible.

    body {
      height: 100vh;
      display: grid;
      grid-template-rows: auto 1fr auto;
      padding: 0px;
      margin: 0px;
    }
    
    header {
      background-color: gold;
    }
    
    div {
      display: grid;
      grid-template-columns: auto 1fr;
      background-color: burlywood;
      overflow: hidden;
    }
    
    aside {
      max-width: 10rem;
      min-height: 0; /* 👈 */
      /* overflow: hidden; */ /* ❗ this will work too */
    }
    
    main {
      display: grid;
      overflow: auto;
    }
    
    footer {
      background-color: aqua;
    }
    
    p {
      background-color: lightgreen;
    }
    
    main p {
      background-color: gray;
    }
    <header>header</header>
    <div>
      <aside>
        <p>
         Lorem ipsum dolor sit, amet consectetur adipisicing elit. Harum
         praesentium autem ex nesciunt distinctio earum. Vel, voluptate ratione
         illum, placeat quam ullam, debitis iure exercitationem reprehenderit
         dignissimos corporis. Distinctio, deleniti?
        </p>
        <p>
         Lorem ipsum dolor sit, amet consectetur adipisicing elit. Harum
         praesentium autem ex nesciunt distinctio earum. Vel, voluptate ratione
         illum, placeat quam ullam, debitis iure exercitationem reprehenderit
         dignissimos corporis. Distinctio, deleniti?
        </p>
        <p>
         Lorem ipsum dolor sit, amet consectetur adipisicing elit. Harum
         praesentium autem ex nesciunt distinctio earum. Vel, voluptate ratione
         illum, placeat quam ullam, debitis iure exercitationem reprehenderit
         dignissimos corporis. Distinctio, deleniti?
        </p>
        <p>
         Lorem ipsum dolor sit, amet consectetur adipisicing elit. Harum
         praesentium autem ex nesciunt distinctio earum. Vel, voluptate ratione
         illum, placeat quam ullam, debitis iure exercitationem reprehenderit
         dignissimos corporis. Distinctio, deleniti?
        </p>
        <p>
         Lorem ipsum dolor sit, amet consectetur adipisicing elit. Harum
         praesentium autem ex nesciunt distinctio earum. Vel, voluptate ratione
         illum, placeat quam ullam, debitis iure exercitationem reprehenderit
         dignissimos corporis. Distinctio, deleniti?
        </p>
        <p>
         Lorem ipsum dolor sit, amet consectetur adipisicing elit. Harum
         praesentium autem ex nesciunt distinctio earum. Vel, voluptate ratione
         illum, placeat quam ullam, debitis iure exercitationem reprehenderit
         dignissimos corporis. Distinctio, deleniti?
        </p>
        <p>
         Lorem ipsum dolor sit, amet consectetur adipisicing elit. Harum
         praesentium autem ex nesciunt distinctio earum. Vel, voluptate ratione
         illum, placeat quam ullam, debitis iure exercitationem reprehenderit
         dignissimos corporis. Distinctio, deleniti?
        </p>
        <p>
         Lorem ipsum dolor sit, amet consectetur adipisicing elit. Harum
         praesentium autem ex nesciunt distinctio earum. Vel, voluptate ratione
         illum, placeat quam ullam, debitis iure exercitationem reprehenderit
         dignissimos corporis. Distinctio, deleniti?
        </p>
      </aside>
      <main>
        <p>
         Lorem ipsum dolor sit, amet consectetur adipisicing elit. Harum
         praesentium autem ex nesciunt distinctio earum. Vel, voluptate ratione
         illum, placeat quam ullam, debitis iure exercitationem reprehenderit
         dignissimos corporis. Distinctio, deleniti?
        </p>
        <p>
         Lorem ipsum dolor sit, amet consectetur adipisicing elit. Harum
         praesentium autem ex nesciunt distinctio earum. Vel, voluptate ratione
         illum, placeat quam ullam, debitis iure exercitationem reprehenderit
         dignissimos corporis. Distinctio, deleniti?
        </p>
        <p>
         Lorem ipsum dolor sit, amet consectetur adipisicing elit. Harum
         praesentium autem ex nesciunt distinctio earum. Vel, voluptate ratione
         illum, placeat quam ullam, debitis iure exercitationem reprehenderit
         dignissimos corporis. Distinctio, deleniti?
        </p>
        <p>
         Lorem ipsum dolor sit, amet consectetur adipisicing elit. Harum
         praesentium autem ex nesciunt distinctio earum. Vel, voluptate ratione
         illum, placeat quam ullam, debitis iure exercitationem reprehenderit
         dignissimos corporis. Distinctio, deleniti?
        </p>
        <p>
         Lorem ipsum dolor sit, amet consectetur adipisicing elit. Harum
         praesentium autem ex nesciunt distinctio earum. Vel, voluptate ratione
         illum, placeat quam ullam, debitis iure exercitationem reprehenderit
         dignissimos corporis. Distinctio, deleniti?
        </p>
        <p>
         Lorem ipsum dolor sit, amet consectetur adipisicing elit. Harum
         praesentium autem ex nesciunt distinctio earum. Vel, voluptate ratione
         illum, placeat quam ullam, debitis iure exercitationem reprehenderit
         dignissimos corporis. Distinctio, deleniti?
        </p>
        <p>
         Lorem ipsum dolor sit, amet consectetur adipisicing elit. Harum
         praesentium autem ex nesciunt distinctio earum. Vel, voluptate ratione
         illum, placeat quam ullam, debitis iure exercitationem reprehenderit
         dignissimos corporis. Distinctio, deleniti?
        </p>
        <p>
         Lorem ipsum dolor sit, amet consectetur adipisicing elit. Harum
         praesentium autem ex nesciunt distinctio earum. Vel, voluptate ratione
         illum, placeat quam ullam, debitis iure exercitationem reprehenderit
         dignissimos corporis. Distinctio, deleniti?
        </p>
        <p>
         Lorem ipsum dolor sit, amet consectetur adipisicing elit. Harum
         praesentium autem ex nesciunt distinctio earum. Vel, voluptate ratione
         illum, placeat quam ullam, debitis iure exercitationem reprehenderit
         dignissimos corporis. Distinctio, deleniti?
        </p>
        <p>
         Lorem ipsum dolor sit, amet consectetur adipisicing elit. Harum
         praesentium autem ex nesciunt distinctio earum. Vel, voluptate ratione
         illum, placeat quam ullam, debitis iure exercitationem reprehenderit
         dignissimos corporis. Distinctio, deleniti?
        </p>
        <p>
         Lorem ipsum dolor sit, amet consectetur adipisicing elit. Harum
         praesentium autem ex nesciunt distinctio earum. Vel, voluptate ratione
         illum, placeat quam ullam, debitis iure exercitationem reprehenderit
         dignissimos corporis. Distinctio, deleniti?
        </p>
        <p>
         Lorem ipsum dolor sit, amet consectetur adipisicing elit. Harum
         praesentium autem ex nesciunt distinctio earum. Vel, voluptate ratione
         illum, placeat quam ullam, debitis iure exercitationem reprehenderit
         dignissimos corporis. Distinctio, deleniti?
        </p>
        <p>
         Lorem ipsum dolor sit, amet consectetur adipisicing elit. Harum
         praesentium autem ex nesciunt distinctio earum. Vel, voluptate ratione
         illum, placeat quam ullam, debitis iure exercitationem reprehenderit
         dignissimos corporis. Distinctio, deleniti?
        </p>
        <p>
         Lorem ipsum dolor sit, amet consectetur adipisicing elit. Harum
         praesentium autem ex nesciunt distinctio earum. Vel, voluptate ratione
         illum, placeat quam ullam, debitis iure exercitationem reprehenderit
         dignissimos corporis. Distinctio, deleniti?
        </p>
        <p>
         Lorem ipsum dolor sit, amet consectetur adipisicing elit. Harum
         praesentium autem ex nesciunt distinctio earum. Vel, voluptate ratione
         illum, placeat quam ullam, debitis iure exercitationem reprehenderit
         dignissimos corporis. Distinctio, deleniti?
        </p>
        <p>
         Lorem ipsum dolor sit, amet consectetur adipisicing elit. Harum
         praesentium autem ex nesciunt distinctio earum. Vel, voluptate ratione
         illum, placeat quam ullam, debitis iure exercitationem reprehenderit
         dignissimos corporis. Distinctio, deleniti?
        </p>
      </main>
    </div>
    <footer>footer</footer>