CSS Align-Items: Master Cross-Axis Alignment in Flexbox and Grid

June 19, 2025

The CSS align-items property is a fundamental tool for controlling cross-axis alignment in both flexbox and CSS Grid layouts. Understanding how to properly use this property is essential for creating well-aligned, professional-looking web interfaces that work consistently across different screen sizes and devices.

What is CSS Align-Items?

The align-items property defines how flex items or grid items are aligned along the container’s cross axis. In a flex container with flex-direction: row, the cross axis runs vertically, while in flex-direction: column, it runs horizontally. For CSS Grid, it controls alignment within grid areas along the block axis.

Basic Syntax

.container {
  display: flex; /* or grid */
  align-items: stretch; /* default value */
}

Align-Items Values and Their Effects

The align-items property accepts several values, each producing different alignment behaviors:

1. stretch (Default Value)

The stretch value makes items stretch to fill the container’s cross-axis dimension. This is the default behavior for both flexbox and grid.

Item 1
Item 2
Item 3

All items stretch to fill the container’s height

.container {
  display: flex;
  align-items: stretch; /* default */
  height: 120px;
}

.item {
  flex: 1;
  padding: 10px;
}

2. flex-start / start

Aligns items to the start of the cross axis. In a horizontal flexbox, this means aligning to the top.

Item 1
Item 2
Multi-line
Item 3

Items align to the top of the container

.container {
  display: flex;
  align-items: flex-start;
  height: 120px;
}

3. flex-end / end

Aligns items to the end of the cross axis. In a horizontal flexbox, this aligns items to the bottom.

Item 1
Item 2
Multi-line
Item 3

Items align to the bottom of the container

.container {
  display: flex;
  align-items: flex-end;
  height: 120px;
}

4. center

Centers items along the cross axis. This is one of the most commonly used values for creating vertically centered layouts.

Item 1
Item 2
Multi-line
Item 3

Items are centered vertically within the container

.container {
  display: flex;
  align-items: center;
  height: 120px;
}

5. baseline

Aligns items along their text baseline. This is particularly useful when you have items with different font sizes or line heights.

Small text
Large text
Medium text

Items align along their text baseline regardless of font size

.container {
  display: flex;
  align-items: baseline;
  height: 120px;
}

.small { font-size: 14px; }
.large { font-size: 24px; }
.medium { font-size: 18px; }

Interactive Demo: Experiment with Align-Items

Try different align-items values:


Small
Large Text
Medium
Multi-line
Current CSS: align-items: stretch;

Align-Items in CSS Grid

While align-items is commonly associated with flexbox, it also works in CSS Grid to align items within their grid areas along the block axis.

Grid Item 1
Grid Item 2
Taller content

Grid items centered within their grid areas

.grid-container {
  display: grid;
  grid-template-columns: 1fr 1fr;
  align-items: center;
  height: 120px;
  gap: 10px;
}

Common Use Cases and Best Practices

Perfect Vertical Centering

One of the most popular uses of align-items: center is creating perfectly centered content:

.hero-section {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 100vh;
}

.hero-content {
  text-align: center;
}

Navigation Bar Alignment

Align navigation items consistently regardless of their content size:

Navigation items stay aligned despite varying content heights

.navbar {
  display: flex;
  align-items: center;
  background: #333;
  padding: 10px;
}

.nav-item {
  padding: 8px 15px;
  margin-right: 10px;
}

Card Layout Alignment

Create consistent card layouts where content is properly aligned:

Card Title

This is some card content that might vary in length.

Another Card

This card has much longer content that spans multiple lines to demonstrate how flex-grow works with align-items.

Cards with consistent button alignment using flexbox and align-items

Browser Support and Considerations

The align-items property has excellent browser support across all modern browsers. However, there are a few considerations to keep in mind:

  • IE11 Support: Partial support with some flexbox bugs. Use vendor prefixes for older browsers.
  • Safari Legacy: Use -webkit-align-items for older Safari versions.
  • Grid Support: CSS Grid support for align-items is available in all modern browsers.

Cross-browser compatibility:

.container {
  display: -webkit-flex; /* Safari */
  display: flex;
  -webkit-align-items: center; /* Safari */
  align-items: center;
}

Common Mistakes and Solutions

Mistake 1: Confusing align-items with justify-content

Remember that align-items controls cross-axis alignment, while justify-content controls main-axis alignment.

/* Wrong - using justify-content for vertical centering */
.container {
  display: flex;
  justify-content: center; /* This centers horizontally */
}

/* Correct - using align-items for vertical centering */
.container {
  display: flex;
  align-items: center; /* This centers vertically */
  justify-content: center; /* This centers horizontally */
}

Mistake 2: Not setting container height

For align-items to have a visible effect, the container needs a defined height or content that creates height.

/* Won't show vertical alignment effect */
.container {
  display: flex;
  align-items: center;
  /* No height specified */
}

/* Will show vertical alignment effect */
.container {
  display: flex;
  align-items: center;
  min-height: 200px; /* or height: 200px; */
}

Advanced Techniques

Overriding with align-self

Individual flex items can override the container’s align-items value using the align-self property:

Normal
Centered
Bottom

Individual items can override the container’s alignment

.container {
  display: flex;
  align-items: flex-start;
}

.special-item {
  align-self: center; /* Overrides container alignment */
}

Responsive Alignment

Use media queries to change alignment behavior on different screen sizes:

.container {
  display: flex;
  align-items: stretch;
}

@media (max-width: 768px) {
  .container {
    flex-direction: column;
    align-items: center;
  }
}

Conclusion

The CSS align-items property is a powerful tool for controlling cross-axis alignment in modern web layouts. Whether you’re working with flexbox for one-dimensional layouts or CSS Grid for two-dimensional layouts, understanding how to properly use align-items will help you create more consistent and visually appealing designs.

Key takeaways:

  • align-items controls cross-axis alignment for all items in a container
  • Use center for perfect vertical centering
  • Use stretch (default) to make items fill the container
  • Use baseline for text alignment across different font sizes
  • Individual items can override container alignment with align-self
  • Remember to set container height for visible alignment effects

Master these concepts, and you’ll be able to create sophisticated layouts that work consistently across different browsers and devices, making your web development process more efficient and your final products more professional.