The One-Line CSS Grid Hack for Instantly Responsive Layouts
Use This Simple Line of CSS Grid to Make Your Layout Instantly Responsive đź’Ą
CSS Grid is a total game changer when it comes to layout design—but what if I told you that a single line of CSS can make your entire layout responsive without writing a single media query? Yup, it’s that easy.
Let’s dive into this magical line, how it works, and the difference between auto-fill
and auto-fit
—all with some spicy Svelte examples. 🌶️
🧪 The Magic of grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
Here’s the full code for a responsive grid layout in Svelte:
App.svelte
<div class="grid">
{#each { length: 100 } as _, i}
<div>{i + 1}</div>
{/each}
</div>
<style>
.grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 1rem;
& > * {
display: grid;
place-content: center;
padding: 6rem;
font-size: 4rem;
font-weight: 600;
background-color: oklch(20% 0 0);
border-radius: 4px;
}
}
</style>
🔥 Just by using this one line of CSS:
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
Your grid is now responsive by default. Say goodbye to that long list of media queries!
🧠Let’s Break It Down
repeat()
: Tells the browser to repeat a column pattern.auto-fill
: Fills the row with as many columns as will fit based on the container width.minmax(200px, 1fr)
: Each column is at least200px
wide but can grow to fill remaining space (1fr
).
It’s that simple—and super powerful. 💪
🤹‍♂️ auto-fill
vs auto-fit
: What’s the Difference?
Now comes the twist! You might have seen both auto-fill
and auto-fit
used in the wild. Let’s compare them with a hands-on Svelte example:
App.svelte
<h1>Auto-Fill</h1>
<div class="fill grid">
{#each { length: 2 } as _, i}
<div>{i + 1}</div>
{/each}
</div>
<h1>Auto-Fit</h1>
<div class="fit grid">
{#each { length: 2 } as _, i}
<div>{i + 1}</div>
{/each}
</div>
<style>
.grid {
display: grid;
gap: 1rem;
padding: 1rem;
border: 2px solid oklch(40% 0 0);
border-radius: 4px;
& > * {
display: grid;
place-content: center;
padding: 6rem;
font-size: 2rem;
font-weight: 600;
background-color: oklch(20% 0 0);
border-radius: 4px;
}
}
.fill {
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
}
.fit {
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
}
</style>
👀 What You’ll See:
- With
auto-fill
, the grid will reserve space for extra columns—even if no content fills them. - With
auto-fit
, empty columns will collapse, and existing grid items will stretch to take up the full space.
🎯 So Which One Should You Use?
- Use
auto-fit
when you want your grid items to stretch and fill available space. - Use
auto-fill
when you want the grid to preserve the structure, even if some spots are empty.
Both are valid and useful—just depends on your layout goal!
✨ Final Thoughts
Creating responsive layouts used to mean writing loads of media queries. But not anymore! With CSS Grid and a clever use of auto-fill
or auto-fit
, your layouts can adapt beautifully with just a single line of code.
So next time you’re designing a layout, give this trick a spin. Your future self (and your users) will thank you. 🙌
Got any creative layouts or CSS Grid tricks you love using in Svelte? Drop them in a comment or share them with your team. Let’s make the web beautifully responsive—one grid at a time! 🧩💙