Responsive Design with CSS Grid
How to build websites that adapt to every device with CSS Grid.
InSkillCoach
Responsive Design with CSS Grid
CSS Grid is a two-dimensional layout system that has revolutionized the way we design web interfaces. Unlike Flexbox, which is primarily one-dimensional, Grid lets you control both rows and columns, making it an ideal tool for building complex, responsive layouts.
Introduction to CSS Grid
CSS Grid lets you divide a page into a grid of rows and columns, then place elements within that grid. It’s like having an HTML table system, but with far more flexibility and control.
Creating a Basic Grid
To create a grid, use the display: grid property on a container:
.container {
display: grid;
grid-template-columns: 200px 200px 200px; /* 3 columns of 200px */
grid-template-rows: 100px 100px; /* 2 rows of 100px */
gap: 20px; /* Space between cells */
}
The fr Unit and repeat()
The fr (fraction) unit is particularly useful for creating responsive layouts:
.container {
display: grid;
grid-template-columns: 1fr 2fr 1fr; /* 1:2:1 ratio */
grid-template-rows: auto;
}
The repeat() function lets you repeat values:
.container {
display: grid;
grid-template-columns: repeat(3, 1fr); /* 3 equal columns */
grid-template-rows: repeat(2, 100px); /* 2 rows of 100px */
}
Placing Items in the Grid
You can place items precisely within the grid:
.item1 {
grid-column: 1 / 3; /* From line 1 to line 3 */
grid-row: 1 / 2; /* From row line 1 to row line 2 */
}
/* Or with the start/end properties */
.item2 {
grid-column-start: 2;
grid-column-end: 4;
grid-row-start: 1;
grid-row-end: 3;
}
Responsive Grids with minmax() and auto-fill/auto-fit
The minmax() function lets you define a minimum and maximum size:
.container {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
gap: 20px;
}
auto-fill: creates as many columns as possibleauto-fit: stretches the existing columns to fill the available space
Named Grid Areas
You can name areas of your grid for more intuitive placement:
.container {
display: grid;
grid-template-areas:
"header header header"
"sidebar content content"
"footer footer footer";
grid-template-columns: 1fr 3fr 1fr;
grid-template-rows: auto 1fr auto;
}
.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.content { grid-area: content; }
.footer { grid-area: footer; }
Responsive Layout Example
Here is an example of a responsive layout that adapts to different screen sizes:
.container {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
grid-gap: 20px;
}
/* On small screens, stack the items */
@media (max-width: 768px) {
.container {
grid-template-columns: 1fr;
}
}
Advanced Layouts with Grid Areas
You can create complex layouts that change based on screen size:
.container {
display: grid;
grid-template-areas:
"header header header"
"sidebar content aside"
"footer footer footer";
grid-template-columns: 1fr 3fr 1fr;
grid-gap: 20px;
}
@media (max-width: 768px) {
.container {
grid-template-areas:
"header"
"content"
"sidebar"
"aside"
"footer";
grid-template-columns: 1fr;
}
}
Alignment in Grid
CSS Grid offers several properties for aligning items:
.container {
display: grid;
grid-template-columns: repeat(3, 1fr);
/* Horizontal alignment of items within their cells */
justify-items: start | end | center | stretch;
/* Vertical alignment of items within their cells */
align-items: start | end | center | stretch;
/* Horizontal alignment of the entire grid */
justify-content: start | end | center | stretch | space-around | space-between | space-evenly;
/* Vertical alignment of the entire grid */
align-content: start | end | center | stretch | space-around | space-between | space-evenly;
}
Practical Example: A Responsive Image Gallery
<div class="gallery">
<img src="image1.jpg" alt="Image 1">
<img src="image2.jpg" alt="Image 2">
<img src="image3.jpg" alt="Image 3">
<img src="image4.jpg" alt="Image 4">
<img src="image5.jpg" alt="Image 5">
<img src="image6.jpg" alt="Image 6">
</div>
.gallery {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
grid-gap: 15px;
}
.gallery img {
width: 100%;
height: 250px;
object-fit: cover;
border-radius: 5px;
transition: transform 0.3s ease;
}
.gallery img:hover {
transform: scale(1.05);
}
Conclusion
CSS Grid is a powerful tool for creating complex, responsive web layouts. By combining Grid with media queries, you can build sites that adapt seamlessly to any screen size.
To deepen your knowledge of CSS Grid, I recommend exploring the MDN documentation and practicing with interactive tools like Grid Garden.
About InSkillCoach
Training and technology expert
Coach specializing in advanced technologies and AI, backed by GNeurone Inc.
Certifications:
- AWS Certified Solutions Architect – Professional
- Google Cloud certifications
- Microsoft Certified: DevOps Engineer Expert
- Certified Kubernetes Administrator (CKA)
- CompTIA Security+
Comments
Comments are powered by GitHub Discussions
Sign in with GitHub to join the discussion