Article Categories
- All Categories
-
Data Structure
-
Networking
-
RDBMS
-
Operating System
-
Java
-
MS Excel
-
iOS
-
HTML
-
CSS
-
Android
-
Python
-
C Programming
-
C++
-
C#
-
MongoDB
-
MySQL
-
Javascript
-
PHP
-
Economics & Finance
How can you set the height of an outer div to always be equal to a particular inner div?
When working with multiple inner div elements inside an outer container, you may need the outer container's height to match the height of a specific inner div. This ensures consistent layout and proper alignment across all inner elements. This article demonstrates two effective approaches using modern CSS techniques.
Syntax
Following is the basic HTML structure for setting outer div height based on inner div
<div class="outer"> <div class="inner control-height">Content that controls height</div> <div class="inner">Content that adapts to height</div> <div class="inner">More content that adapts</div> </div>
Using CSS Flexbox
CSS Flexbox automatically distributes space among flex items and ensures all items in a flex container share the same height. The tallest flex item determines the height of the container, and all other items stretch to match that height.
Example
Following example uses Flexbox to make the outer div height match the tallest inner div
<!DOCTYPE html>
<html>
<head>
<title>Flexbox Height Control</title>
<style>
.outer {
display: flex;
border: 2px solid #2196f3;
margin: 20px 0;
padding: 10px;
background-color: #f5f5f5;
}
.outer > div {
flex: 1;
margin: 5px;
padding: 15px;
border: 1px solid #ddd;
background-color: white;
}
.control-height {
border-color: #ff9800 !important;
background-color: #fff3e0 !important;
}
.adapt-height {
display: flex;
flex-direction: column;
}
.adapt-height > div {
flex: 1;
display: flex;
align-items: center;
}
</style>
</head>
<body style="font-family: Arial, sans-serif; padding: 20px;">
<h2>Flexbox Height Matching</h2>
<div class="outer">
<div class="control-height">
This div controls the height.<br>
It has more content and<br>
determines the container height.<br>
All other divs will stretch to match.
</div>
<div class="adapt-height">
<div>Short content that adapts</div>
</div>
<div class="adapt-height">
<div>Another div that stretches to full height</div>
</div>
</div>
<div class="outer">
<div class="control-height">
Shorter controlling content
</div>
<div class="adapt-height">
<div>Adapting content</div>
</div>
<div class="adapt-height">
<div>More adapting content</div>
</div>
</div>
</body>
</html>
The output shows that all inner divs automatically match the height of the tallest div (highlighted in orange)
Flexbox Height Matching [Container 1: Three equal-height columns where the first (orange) has 4 lines of text, others stretch to match] [Container 2: Three equal-height columns where the first (orange) has 1 line, others adapt accordingly]
Using CSS Grid
CSS Grid provides another approach where grid items in the same row automatically share the same height. The min-height: 100% property ensures that shorter content areas expand to fill the available space.
Example
Following example demonstrates the CSS Grid approach
<!DOCTYPE html>
<html>
<head>
<title>CSS Grid Height Control</title>
<style>
.grid-outer {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
gap: 10px;
border: 2px solid #4caf50;
margin: 20px 0;
padding: 10px;
background-color: #f1f8e9;
}
.grid-outer > div {
padding: 15px;
border: 1px solid #ddd;
background-color: white;
min-height: 100%;
}
.grid-control {
border-color: #ff5722 !important;
background-color: #fbe9e7 !important;
}
.grid-adapt {
display: flex;
align-items: center;
overflow: auto;
}
</style>
</head>
<body style="font-family: Arial, sans-serif; padding: 20px;">
<h2>CSS Grid Height Matching</h2>
<div class="grid-outer">
<div class="grid-control">
This div controls the height in grid layout.<br>
It has multiple lines of content<br>
and sets the row height.<br>
Other grid items match this height.
</div>
<div class="grid-adapt">
Short content that fills available height
</div>
<div class="grid-adapt">
Another grid item that expands vertically
</div>
</div>
<div class="grid-outer">
<div class="grid-control">
Shorter control content
</div>
<div class="grid-adapt">
Adapting grid item
</div>
<div class="grid-adapt">
Final grid item
</div>
</div>
</body>
</html>
The output demonstrates that grid items automatically align their heights within each row
CSS Grid Height Matching [Grid 1: Three equal-height columns where the first (red) has 4 lines, others expand to match] [Grid 2: Three equal-height columns where the first (red) has 1 line, others match accordingly]
Key Differences
Following table compares the Flexbox and CSS Grid approaches
| Aspect | Flexbox | CSS Grid |
|---|---|---|
| Layout Model | One-dimensional (row or column) | Two-dimensional (rows and columns) |
| Height Matching | Automatic stretch behavior | Uses min-height: 100%
|
| Browser Support | Excellent (IE 11+) | Good (IE 11+ with -ms- prefix) |
| Use Case | Simple row layouts | Complex grid layouts |
| Content Overflow | Requires additional positioning | Built-in overflow handling |
How It Works
Flexbox Method: When display: flex is applied to a container, all direct child elements become flex items. By default, flex items stretch to match the height of the tallest item in the same flex line. The flex: 1 property distributes available space equally among items.
CSS Grid Method: Grid items in the same row automatically share the same height. The min-height: 100% ensures that shorter content areas expand to fill the available vertical space within their grid cell.
Browser Compatibility
Both methods have excellent modern browser support. Flexbox works in all browsers including Internet Explorer 11+, while CSS Grid works in IE 11+ with vendor prefixes. For maximum compatibility, Flexbox is the safer choice for simple height matching scenarios.
Conclusion
Both CSS Flexbox and CSS Grid provide effective solutions for matching outer div height to inner div content. Flexbox offers simpler implementation for straightforward layouts, while CSS Grid provides more control for complex grid-based designs. Choose based on your layout requirements and browser support needs.
