← Back to all snippets
CSS

CSS Grid: Define Responsive Layouts with `grid-template-areas`

Master creating complex, readable, and responsive page layouts using CSS Grid's `grid-template-areas` property for intuitive structure definition.

.grid-container {
    display: grid;
    grid-template-columns: 1fr; /* Single column on small screens */
    grid-template-rows: auto;
    grid-template-areas:
        "header"
        "nav"
        "main"
        "sidebar"
        "footer";
    gap: 15px;
    padding: 10px;
    min-height: 100vh;
    background-color: #f4f4f4;
}

.header { grid-area: header; background-color: #333; color: white; padding: 10px; }
.nav { grid-area: nav; background-color: #007bff; color: white; padding: 10px; }
.main { grid-area: main; background-color: #e9ecef; padding: 20px; }
.sidebar { grid-area: sidebar; background-color: #6c757d; color: white; padding: 15px; }
.footer { grid-area: footer; background-color: #333; color: white; padding: 10px; text-align: center; }

@media (min-width: 768px) {
    .grid-container {
        grid-template-columns: 200px 1fr; /* Sidebar fixed, main fills */
        grid-template-rows: auto 1fr auto;
        grid-template-areas:
            "header header"
            "nav    main"
            "sidebar main"
            "footer footer";
    }
}

@media (min-width: 1024px) {
    .grid-container {
        grid-template-columns: 200px 1fr 250px; /* Nav fixed, main fills, sidebar fixed */
        grid-template-areas:
            "header header  header"
            "nav    main    sidebar"
            "footer footer  footer";
    }
}

<!-- HTML -->
<div class="grid-container">
    <header class="header">Header</header>
    <nav class="nav">Navigation</nav>
    <main class="main">Main Content</main>
    <aside class="sidebar">Sidebar</aside>
    <footer class="footer">Footer</footer>
</div>
How it works: This snippet demonstrates how to build a complex, responsive page layout using CSS Grid's `grid-template-areas`. Each area is given a semantic name, and these names are then used to visually "draw" the layout directly in the CSS, making it highly readable. Media queries are used to redefine `grid-template-columns`, `grid-template-rows`, and `grid-template-areas` for different screen sizes, creating a fluid and responsive design from mobile to desktop.

Need help integrating this into your project?

Our team of expert developers can help you build your custom application from scratch.

Hire DigitalCodeLabs