CSS Vertical-Align: Complete Guide to Aligning Inline and Table Cell Content

June 14, 2025

The CSS vertical-align property is one of the most misunderstood properties in web development. While many developers expect it to work like text-align for vertical positioning, it actually serves a specific purpose: controlling the vertical alignment of inline and table-cell elements relative to their baseline or containing element.

Understanding CSS Vertical-Align Fundamentals

The vertical-align property only affects elements with specific display types:

  • Inline elements (span, img, input, etc.)
  • Inline-block elements
  • Table-cell elements

It does not work on block-level elements like divs, paragraphs, or sections unless they’re displayed as table cells.

Basic Syntax

/* Keyword values */
vertical-align: baseline;
vertical-align: top;
vertical-align: middle;
vertical-align: bottom;
vertical-align: text-top;
vertical-align: text-bottom;
vertical-align: sub;
vertical-align: super;

/* Length values */
vertical-align: 10px;
vertical-align: 0.5em;
vertical-align: -2px;

/* Percentage values */
vertical-align: 20%;
vertical-align: -50%;

Vertical-Align Values and Their Effects

Baseline Alignment (Default)

The baseline value aligns the element’s baseline with the baseline of its parent. This is the default behavior for most inline elements.

This is normal text baseline with different sizes.

Top and Bottom Alignment

The top value aligns the top of the element with the top of the tallest element on the line, while bottom aligns with the bottom of the lowest element.

Text with top and bottom aligned elements.

Middle Alignment

The middle value aligns the middle of the element with the baseline plus half the x-height of the parent font.

Large text middle aligned with small text.

Text-Top and Text-Bottom

These values align with the top and bottom of the parent element’s font, respectively, ignoring line-height.

Text with text-top and text-bottom alignment.

Superscript and Subscript

The super and sub values create superscript and subscript effects without changing font size.

E = mc2 and H2O

Working with Images and Vertical-Align

One common use case for vertical-align is aligning images with text. By default, images align to the baseline, which can create unwanted spacing.

Default Image Alignment (Baseline)

Text with image icon creates spacing issues.

Middle-Aligned Image

Text with image icon aligns better with text.

Vertical-Align in Table Cells

In table cells, vertical-align controls how content is positioned within the cell’s height. This is particularly useful for creating professional-looking data tables.

Alignment Content Description
Top This content is aligned to the top of the cell, regardless of cell height. Content sticks to the top edge
Middle This content is centered vertically within the cell. Content is vertically centered
Bottom This content is aligned to the bottom of the cell. Content sticks to the bottom edge

Using Length and Percentage Values

You can use specific length values (px, em, rem) or percentages to create precise vertical positioning. Positive values move elements up, while negative values move them down.

Baseline text
+10px
0px
-10px
with different offsets.

Interactive Demo: Vertical-Align in Action

Try Different Vertical-Align Values


This is sample text with a highlighted element that changes alignment.

Common Vertical-Align Mistakes and Solutions

Mistake 1: Trying to Center Block Elements

❌ This Won’t Work

.container {
  height: 300px;
  vertical-align: middle; /* Won't work on block elements */
}

✅ Better Solutions

/* Use Flexbox */
.container {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 300px;
}

/* Or CSS Grid */
.container {
  display: grid;
  place-items: center;
  height: 300px;
}

Mistake 2: Expecting Middle to Always Center

The middle value doesn’t always produce perfect centering because it aligns with the font’s x-height, not the mathematical center of the line.

Large text middle with borders showing actual centering.

Advanced Techniques and Best Practices

Creating Custom Baselines

You can create custom alignment points by combining vertical-align with relative positioning:

Text with custom baseline adjustment.

Aligning Form Elements

Form elements often need vertical alignment adjustments to look professional alongside labels and text:




Browser Support and Compatibility

The vertical-align property has excellent browser support and works consistently across all modern browsers. It’s been part of CSS since the early specifications and is considered a stable, well-supported property.

✅ Supported In:

  • All modern browsers (Chrome, Firefox, Safari, Edge)
  • Internet Explorer 4+
  • Mobile browsers (iOS Safari, Chrome Mobile, Samsung Internet)

Performance Considerations

The vertical-align property doesn’t trigger layout recalculations when changed, making it relatively performance-friendly. However, excessive use of length values that create dramatic shifts can impact rendering performance, especially with many elements.

Conclusion

The CSS vertical-align property is a powerful tool for fine-tuning the alignment of inline and table-cell elements. While it doesn’t work for general block-level element centering, it excels at its intended purpose: controlling how inline content aligns relative to text baselines and within table cells.

Key takeaways for effective use of vertical-align:

  • Use it for inline elements, inline-block elements, and table cells
  • Understand that middle aligns with the font’s x-height, not geometric center
  • Combine with other CSS properties for complex layouts
  • Test across different font sizes and line heights
  • Consider modern alternatives like Flexbox and Grid for block-level centering

Master these concepts, and you’ll have precise control over how your inline content aligns, creating more polished and professional web interfaces.