How to Align Items in CSS Grid with Justify and Align Properties

Master how to align items in CSS Grid using justify and align properties. Achieve perfect element positioning in your layouts

Aligning items within a CSS Grid can often seem like a daunting task, especially when striving for precision and responsiveness across various devices. However, the justify and align properties of CSS Grid provide powerful tools to control the positioning of items within your grid containers and items. In this article, we will delve deeply into these properties, offering detailed explanations, practical examples, and actionable tips to help you master the art of aligning items in CSS Grid. Whether you are a beginner or an experienced developer, this guide will enhance your web design skills and improve your layout techniques.

Understanding the Basics of CSS Grid

What is CSS Grid?

CSS Grid is a two-dimensional layout system that allows web designers to create complex layouts on the web. Unlike traditional layout methods, CSS Grid provides an intuitive and flexible way to arrange elements both in rows and columns, giving you more control over the entire page layout. The main components of CSS Grid are the grid container and the grid items. The container is the parent element that holds the grid items, which are the children elements.

Using CSS Grid, you can define grid lines, areas, and gaps to position your content precisely where you want it. This makes it a preferred choice for modern web design, enabling responsive and dynamic layouts without the need for extensive CSS code.

Key Properties: Justify and Align

Two of the most important properties for aligning items within a CSS Grid are justify and align. These properties come in various forms, such as justify-items, justify-content, align-items, and align-content. Understanding how to use these properties effectively can greatly enhance the visual appeal and functionality of your web layouts.

justify-items: Aligns grid items along the inline (row) axis.

justify-content: Aligns the grid container’s content along the inline (row) axis.

align-items: Aligns grid items along the block (column) axis.

align-content: Aligns the grid container’s content along the block (column) axis.

Aligning Items with Justify Properties

Using justify-items

The justify-items property is used to align items within their grid area along the row axis. This property can take several values, including start, end, center, and stretch.

.grid-container {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-gap: 10px;
justify-items: center;
}
.grid-item {
background-color: #e0e0e0;
padding: 20px;
text-align: center;
}
<div class="grid-container">
<div class="grid-item">Item 1</div>
<div class="grid-item">Item 2</div>
<div class="grid-item">Item 3</div>
</div>

In this example, the justify-items: center; property centers the grid items horizontally within their grid area. You can change the value to start, end, or stretch to see different alignment effects.

Using justify-content

The justify-content property aligns the entire grid container’s content along the row axis. This property is particularly useful when you want to control the spacing between grid tracks or align the grid tracks within the container.

.grid-container {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-gap: 10px;
justify-content: space-between;
}
.grid-item {
background-color: #e0e0e0;
padding: 20px;
text-align: center;
}
<div class="grid-container">
<div class="grid-item">Item 1</div>
<div class="grid-item">Item 2</div>
<div class="grid-item">Item 3</div>
</div>

In this example, the justify-content: space-between; property ensures that there is an even space between each grid item. Other values such as start, end, center, space-around, and space-evenly can be used to achieve different alignment results.

The align-items property aligns grid items within their grid area along the column axis

Aligning Items with Align Properties

Using align-items

The align-items property aligns grid items within their grid area along the column axis. This property can take values such as start, end, center, and stretch.

.grid-container {
display: grid;
grid-template-rows: repeat(3, 100px);
grid-gap: 10px;
align-items: center;
}
.grid-item {
background-color: #d0d0d0;
padding: 20px;
text-align: center;
}
<div class="grid-container">
<div class="grid-item">Item 1</div>
<div class="grid-item">Item 2</div>
<div class="grid-item">Item 3</div>
</div>

In this example, the align-items: center; property centers the grid items vertically within their grid area. You can use other values like start, end, or stretch to see different vertical alignments.

Using align-content

The align-content property aligns the entire grid container’s content along the column axis. This property is useful when you want to control the spacing between grid tracks or align the grid tracks within the container.

.grid-container {
display: grid;
grid-template-rows: repeat(3, 100px);
grid-gap: 10px;
align-content: space-around;
}
.grid-item {
background-color: #d0d0d0;
padding: 20px;
text-align: center;
}
<div class="grid-container">
<div class="grid-item">Item 1</div>
<div class="grid-item">Item 2</div>
<div class="grid-item">Item 3</div>
</div>

In this example, the align-content: space-around; property ensures that there is an even space around the grid tracks. Other values such as start, end, center, space-between, and space-evenly can be used to achieve different vertical alignment results.

Combining Justify and Align Properties

Centering Items Both Horizontally and Vertically

To center items both horizontally and vertically within a grid container, you can combine the justify-items and align-items properties.

.grid-container {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(3, 100px);
grid-gap: 10px;
justify-items: center;
align-items: center;
}
.grid-item {
background-color: #c0c0c0;
padding: 20px;
text-align: center;
}
<div class="grid-container">
<div class="grid-item">Item 1</div>
<div class="grid-item">Item 2</div>
<div class="grid-item">Item 3</div>
</div>

In this example, both justify-items and align-items are set to center, which centers each grid item within its grid area both horizontally and vertically.

Distributing Space Evenly

To distribute space evenly between grid items, you can combine the justify-content and align-content properties.

.grid-container {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(3, 100px);
grid-gap: 10px;
justify-content: space-evenly;
align-content: space-evenly;
}
.grid-item {
background-color: #b0b0b0;
padding: 20px;
text-align: center;
}
<div class="grid-container">
<div class="grid-item">Item 1</div>
<div class="grid-item">Item 2</div>
<div class="grid-item">Item 3</div>
</div>

In this example, justify-content: space-evenly; and align-content: space-evenly; ensure that there is an even amount of space between and around the grid items. This creates a balanced and aesthetically pleasing layout.

Advanced Techniques with Justify and Align Properties

Using justify-self and align-self

The justify-self and align-self properties allow you to override the justify-items and align-items settings for individual grid items. This can be useful for fine-tuning the positioning of specific items within the grid.

.grid-container {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(3, 100px);
grid-gap: 10px;
justify-items: center;
align-items: center;
}
.grid-item {
background-color: #a0a0a0;
padding: 20px;
text-align: center;
}
.special-item {
justify-self: end;
align-self: start;
}
<div class="grid-container">
<div class="grid-item">Item 1</div>
<div class="grid-item special-item">Special Item</div>
<div class="grid-item">Item 3</div>
</div>

In this example, the .special-item class uses justify-self: end; and align-self: start; to position the second item at the end of its column and the start of its row, overriding the default center alignment.

Combining Flexbox and CSS Grid for Complex Layouts

Combining Flexbox with CSS Grid can offer even more flexibility and control over complex layouts. You can use CSS Grid for the overall structure and Flexbox for fine-tuning the alignment and distribution of items within each grid area.

.grid-container {
display: grid;
grid-template-columns: 2fr 1fr;
grid-gap: 20px;
}
.flex-container {
display: flex;
justify-content: center;
align-items: center;
background-color: #909090;
padding: 20px;
}
<div class="grid-container">
<div class="flex-container">
<div>Flex Item 1</div>
<div>Flex Item 2</div>
</div>
<div class="flex-container">
<div>Flex Item 3</div>
<div>Flex Item 4</div>
</div>
</div>

In this example, the .grid-container class creates a two-column grid layout, and the .flex-container class uses Flexbox properties to center items within each grid area. This combination provides a powerful and flexible way to manage complex layouts.

A responsive gallery layout can benefit greatly from CSS Grid's alignment properties.

Practical Examples and Use Cases

Creating a Responsive Gallery

A responsive gallery layout can benefit greatly from CSS Grid’s alignment properties. By using justify and align properties, you can ensure that the images are displayed neatly and responsively.

.gallery-container {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
grid-gap: 20px;
justify-items: center;
align-items: center;
}
.gallery-item {
width: 100%;
height: auto;
}
<div class="gallery-container">
<img src="image1.jpg" class="gallery-item" alt="Image 1">
<img src="image2.jpg" class="gallery-item" alt="Image 2">
<img src="image3.jpg" class="gallery-item" alt="Image 3">
</div>

In this example, the .gallery-container class uses grid-template-columns with minmax and auto-fill to create a responsive layout. The justify-items: center; and align-items: center; properties ensure that each image is centered within its grid area.

Designing a Feature Section

A feature section with icons and text can be aligned perfectly using CSS Grid’s justify and align properties, ensuring a balanced and visually appealing layout.

.feature-container {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-gap: 20px;
justify-items: center;
align-items: start;
}
.feature-item {
background-color: #808080;
padding: 20px;
text-align: center;
}
<div class="feature-container">
<div class="feature-item">
<i class="icon-feature"></i>
<h3>Feature 1</h3>
<p>Description of feature 1.</p>
</div>
<div class="feature-item">
<i class="icon-feature"></i>
<h3>Feature 2</h3>
<p>Description of feature 2.</p>
</div>
<div class="feature-item">
<i class="icon-feature"></i>
<h3>Feature 3</h3>
<p>Description of feature 3.</p>
</div>
</div>

In this example, the .feature-container class sets up a three-column grid layout. The justify-items: center; property centers each feature item horizontally, while align-items: start; aligns them at the top of their grid area. This ensures a clean and organized presentation of the features.

Advanced Alignment Techniques in CSS Grid

Aligning Nested Grids

Nested grids provide an additional layer of complexity and flexibility in your layouts. Aligning nested grids within a parent grid can help create highly structured and visually appealing designs. Here’s how you can align nested grids using justify and align properties.

.parent-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
grid-gap: 20px;
justify-items: center;
align-items: start;
}
.nested-grid {
display: grid;
grid-template-columns: 1fr 1fr;
grid-gap: 10px;
justify-items: stretch;
align-items: center;
}
.grid-item {
background-color: #d0d0d0;
padding: 20px;
text-align: center;
}
<div class="parent-grid">
<div class="nested-grid">
<div class="grid-item">Nested Item 1</div>
<div class="grid-item">Nested Item 2</div>
</div>
<div class="grid-item">Parent Item 1</div>
</div>

In this example, the .parent-grid class sets up a two-column layout with centered items horizontally and aligned to the start vertically. The nested grid within the first parent grid item uses justify-items: stretch to ensure items take up the full width available and align-items: center to center them vertically.

Aligning Large Content Blocks

When dealing with large content blocks, it’s crucial to maintain readability and aesthetic appeal. Aligning these blocks using CSS Grid can help ensure that your content is well-organized and visually balanced.

.large-content-container {
display: grid;
grid-template-columns: 2fr 1fr;
grid-gap: 20px;
justify-content: space-between;
align-content: space-around;
}
.content-block {
background-color: #e8e8e8;
padding: 20px;
text-align: left;
}
.sidebar {
background-color: #c8c8c8;
padding: 20px;
text-align: left;
}
<div class="large-content-container">
<div class="content-block">Main Content</div>
<div class="sidebar">Sidebar Content</div>
</div>

In this example, the .large-content-container class uses grid-template-columns to allocate more space to the main content block than the sidebar. The justify-content: space-between; and align-content: space-around; properties ensure that the content is evenly distributed and balanced within the container.

A team member section is a common component on many websites

Practical Applications in Real-World Projects

Creating a Team Member Section

A team member section is a common component on many websites, often used to showcase profiles with pictures, names, and roles. Using CSS Grid’s alignment properties can ensure a neat and organized layout.

.team-container {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
grid-gap: 20px;
justify-items: center;
align-items: start;
}
.team-member {
background-color: #f0f0f0;
padding: 20px;
text-align: center;
}
.team-member img {
border-radius: 50%;
width: 100px;
height: 100px;
}
<div class="team-container">
<div class="team-member">
<img src="member1.jpg" alt="Member 1">
<h3>Member 1</h3>
<p>Role</p>
</div>
<div class="team-member">
<img src="member2.jpg" alt="Member 2">
<h3>Member 2</h3>
<p>Role</p>
</div>
<div class="team-member">
<img src="member3.jpg" alt="Member 3">
<h3>Member 3</h3>
<p>Role</p>
</div>
</div>

In this example, the .team-container class creates a responsive grid that adapts to different screen sizes. The justify-items: center; and align-items: start; properties ensure that each team member’s profile is centered horizontally and aligned at the top of the grid area.

Building a Services Section

A services section can benefit from CSS Grid’s alignment properties to present each service clearly and attractively. This ensures that users can easily understand the services offered.

.services-container {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-gap: 20px;
justify-items: stretch;
align-items: start;
}
.service-item {
background-color: #e0e0e0;
padding: 20px;
text-align: center;
}
<div class="services-container">
<div class="service-item">
<h3>Service 1</h3>
<p>Description of service 1.</p>
</div>
<div class="service-item">
<h3>Service 2</h3>
<p>Description of service 2.</p>
</div>
<div class="service-item">
<h3>Service 3</h3>
<p>Description of service 3.</p>
</div>
</div>

In this example, the .services-container class uses grid-template-columns to create a three-column layout, with justify-items: stretch; ensuring that each service item takes up the full width available. The align-items: start; property aligns the items at the top of their grid area, creating a clean and organized presentation.

Advanced Techniques and Best Practices

Using Grid Template Areas

Grid template areas allow you to define named grid areas within your grid container, making it easier to manage complex layouts. This technique can simplify your CSS and make it more readable.

.grid-template-container {
display: grid;
grid-template-columns: 1fr 2fr 1fr;
grid-template-rows: auto;
grid-template-areas:
"header header header"
"sidebar main main"
"footer footer footer";
grid-gap: 20px;
}
.header {
grid-area: header;
background-color: #d0d0d0;
padding: 20px;
text-align: center;
}
.sidebar {
grid-area: sidebar;
background-color: #e0e0e0;
padding: 20px;
text-align: center;
}
.main {
grid-area: main;
background-color: #f0f0f0;
padding: 20px;
text-align: center;
}
.footer {
grid-area: footer;
background-color: #c0c0c0;
padding: 20px;
text-align: center;
}
<div class="grid-template-container">
<div class="header">Header</div>
<div class="sidebar">Sidebar</div>
<div class="main">Main Content</div>
<div class="footer">Footer</div>
</div>

In this example, the grid-template-areas property defines named areas for different parts of the layout. This approach simplifies the alignment and positioning of each section, making the CSS more intuitive and easier to maintain.

Combining Alignment with Media Queries

Combining alignment properties with media queries allows you to create responsive designs that adjust to different screen sizes. This ensures that your layouts are consistent and functional across all devices.

@media (max-width: 768px) {
.services-container {
grid-template-columns: 1fr;
justify-items: center;
align-items: center;
}
}
<div class="services-container">
<div class="service-item">
<h3>Service 1</h3>
<p>Description of service 1.</p>
</div>
<div class="service-item">
<h3>Service 2</h3>
<p>Description of service 2.</p>
</div>
<div class="service-item">
<h3>Service 3</h3>
<p>Description of service 3.</p>
</div>
</div>

In this example, a media query is used to change the grid layout for screens smaller than 768px. The services-container class switches to a single-column layout, with justify-items: center; and align-items: center; ensuring that each service item is centered horizontally and vertically. This approach enhances the user experience on smaller devices.

Conclusion

Aligning items in CSS Grid using justify and align properties provides a powerful and flexible way to control the layout and positioning of elements within your web designs. By understanding and effectively using properties such as justify-items, justify-content, align-items, and align-content, you can create responsive, visually appealing, and well-structured layouts. Combining these properties with advanced techniques and practical examples ensures that your designs are not only functional but also aesthetically pleasing.

As you continue to explore and experiment with CSS Grid, you will discover new ways to optimize your layouts and enhance the overall user experience. By following the tips and techniques outlined in this article, you can elevate your web design skills and deliver exceptional performance for your users. Happy designing!

Read Next: