Home 〉 CSS Tutorials 〉 CSS Flexbox Tutorial: Master CSS Display Flex Property with Examples
CSS Flexbox Tutorial: Master CSS Display Flex Property with Examples !
Having trouble aligning items in a row or column? CSS Flexbox makes it easy to create flexible, responsive layouts using the `display: flex` property. You’ll learn how to align items horizontally or vertically, distribute space evenly, and wrap content as needed. Flexbox is great for navbars, cards, and toolbars.
We've already covered the basics of 'display' in our post “CSS Display Property Explained with Examples | Block, Inline, Flex, Grid.” In this post, we will dive deep into one of the most powerful layout tools in CSS: 'display: flex'.
Flexbox is used to build responsive and dynamic web layouts. It allows items within a container to adjust and align themselves based on the container's size and the properties applied.
CSS Flexbox (Flexible Box) layout is designed to distribute space and align items within a container, even when their size is unknown or dynamic.
To use it:
Example 📄
.container {
display: flex;
}
This makes all child elements of '.container' become 'flex items'.
These properties are applied to the parent (flex container)
Defines an element as a flex container.
Example 📄
.container {
display: flex;
}
Values:
Controls the direction of items in the flex container.
Example 📄
.container {
display: flex;
flex-direction: row;
}
Values:
Defines if items should wrap onto multiple lines.
Example 📄
.container {
flex-wrap: wrap;
}
Values:
Shorthand for `flex-direction` and `flex-wrap`.
Example 📄
.container {
flex-flow: flex-direction flex-wrap;
}
Values: 'row wrap', 'row nowrap', 'column wrap', 'column nowrap', etc
Aligns items horizontally.
Example 📄
.container {
justify-content: space-between;
}
Values:
Aligns items vertically (cross axis).
Example 📄
.container {
align-items: center;
}
Values:
Aligns rows when there's extra space in the container.
Example 📄
.container {
align-content: space-between;
}
Note: Only works when items wrap ('flex-wrap: wrap').
Values:
Defines spacing between flex items.
Example 📄
.container {
row-gap: 10px;
column-gap: 10px;
gap: 10px;
}
Values:'length' (e.g., '10px'),'percentage', 'gap: 10px 20px' → row gap 10px, column gap 20px.
These are applied to the children (flex items) inside the container.
Controls the order of flex items.
Example 📄
.item {
order: 2;
}
Default value is '0'. Lower numbers appear first.
Values:
Defines how much a flex item should grow relative to others.
Example 📄
.item {
flex-grow: 1;
}
Values:
Specifies how an item should shrink when space is tight.
Example 📄
.item {
flex-shrink: 1;
}
Values:
Defines the default size of an element before the remaining space is distributed.
Example 📄
.item {
flex-basis: 200px;
}
Values:
Shorthand for 'flex-grow', 'flex-shrink', and 'flex-basis'.
Example 📄
.item {
flex: 1 1 100px;
}
Examples:
Overrides 'align-items' for a specific item.
Example 📄
.item {
align-self: flex-end;
}
Values : 'auto' (default), 'flex-start', 'flex-end', 'center', 'baseline', and 'stretch'
<!DOCTYPE html>
<html>
<head>
<style>
.cont1 {
display: flex;
width: 100%;
border: 5px outset gray;
background-color: whitesmoke;
}
.cont1a {
width: 70px;
padding: 5px 100px;
height: 40px;
background-color: rgba(255, 249, 128, 0.789);
border: 1px solid gray;
}
</style>
</head>
<body>
<ul class="aul">
<li>This 'flex-box' has following CSS styling</li>
<li>.cont1 { display: flex; width: 100%; border: 5px outset gray; background-color: whitesmoke; }</li>
<li>.cont1a { width: 70px; padding: 5px 100px; height: 40px; background-color: rgba(255, 249, 128, 0.789); border: 1px solid gray; } </li>
</ul>
<div class="cont1">
<div class="cont1a">1</div>
<div class="cont1a">2</div>
<div class="cont1a">3</div>
<div class="cont1a">4</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
<h3 class="ah3 anor anoi">flex-direction: row (default value) </h3>
<div class="cont1" style="flex-direction: row; flex-wrap: wrap;">
<div class="cont1a">1</div>
<div class="cont1a">2</div>
<div class="cont1a">3</div>
<div class="cont1a">4</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
<h3 class="ah3 anoi">flex-direction: row-reverse</h3>
<div class="cont1" style="flex-direction: row-reverse; flex-wrap: wrap;">
<div class="cont1a">1</div>
<div class="cont1a">2</div>
<div class="cont1a">3</div>
<div class="cont1a">4</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
<h3 class="ah3 anoi">flex-direction: column </h3>
<div class="cont1" style="flex-direction: column; flex-wrap: wrap;">
<div class="cont1a">1</div>
<div class="cont1a">2</div>
<div class="cont1a">3</div>
<div class="cont1a">4</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
<h3 class="ah3 anoi">flex-direction: column-reverse</h3>
<div class="cont1" style="flex-direction: column-reverse; flex-wrap: wrap;">
<div class="cont1a">1</div>
<div class="cont1a">2</div>
<div class="cont1a">3</div>
<div class="cont1a">4</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
<h3 class="ah3 anoi">flex-wrap: nowrap (default value) </h3>
<div class="cont1" style="flex-wrap: nowrap;">
<div class="cont1a">1</div>
<div class="cont1a">2</div>
<div class="cont1a">3</div>
<div class="cont1a">4</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
<h3 class="ah3 anoi">flex-wrap: wrap </h3>
<div class="cont1" style="flex-wrap: wrap;">
<div class="cont1a">1</div>
<div class="cont1a">2</div>
<div class="cont1a">3</div>
<div class="cont1a">4</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
<h3 class="ah3 anoi">flex-wrap: wrap-reverse </h3>
<div class="cont1" style="flex-wrap: wrap-reverse;">
<div class="cont1a">1</div>
<div class="cont1a">2</div>
<div class="cont1a">3</div>
<div class="cont1a">4</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
<h3 class="ah3 anoi">flex-flow: row nowrap</h3>
<div class="cont1" style="flex-flow: row nowrap;">
<div class="cont1a">1</div>
<div class="cont1a">2</div>
<div class="cont1a">3</div>
<div class="cont1a">4</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
<h3 class="ah3 anoi">flex-flow: row wrap</h3>
<div class="cont1" style="flex-flow: row wrap;">
<div class="cont1a">1</div>
<div class="cont1a">2</div>
<div class="cont1a">3</div>
<div class="cont1a">4</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
<h3 class="ah3 anoi">flex-flow: column nowrap</h3>
<div class="cont1" style="flex-flow: column nowrap ;">
<div class="cont1a">1</div>
<div class="cont1a">2</div>
<div class="cont1a">3</div>
<div class="cont1a">4</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
<h3 class="ah3 anoi">flex-flow: column wrap</h3>
<div class="cont1" style="flex-flow: column wrap;">
<div class="cont1a">1</div>
<div class="cont1a">2</div>
<div class="cont1a">3</div>
<div class="cont1a">4</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
<h3 class="ah3 anoi">flex-flow: column nowrap with height: 100px</h3>
<div class="cont1" style="flex-flow: column nowrap; height: 100px;">
<div class="cont1a">1</div>
<div class="cont1a">2</div>
<div class="cont1a">3</div>
<div class="cont1a">4</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
<h3 class="ah3 anoi">flex-flow: column wrap with height: 100px</h3>
<div class="cont1" style="flex-flow: column wrap; height: 100px;">
<div class="cont1a">1</div>
<div class="cont1a">2</div>
<div class="cont1a">3</div>
<div class="cont1a">4</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
</body>
</html>
output 📌
You can Try the above code by changing the values in our user-friendly code editor by clicking the "Try It" button and see the output of the same.
<!DOCTYPE html>
<html>
<head>
<style>
</style>
</head>
<body>
<h3 class="ah3 anoi">justify-content: flex-start (default value)</h3>
<div class="cont1" style="justify-content: flex-start; flex-flow: row wrap;">
<div class="cont1a">1</div>
<div class="cont1a">2</div>
<div class="cont1a">3</div>
<div class="cont1a">4</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
<h3 class="ah3 anoi">justify-content: flex-end</h3>
<div class="cont1" style="justify-content: flex-end; flex-flow: row wrap;">
<div class="cont1a">1</div>
<div class="cont1a">2</div>
<div class="cont1a">3</div>
<div class="cont1a">4</div>
</div> <br> <br>
<h3 class="ah3 anoi">justify-content: center</h3>
<div class="cont1" style="justify-content: center; flex-flow: row wrap;">
<div class="cont1a">1</div>
<div class="cont1a">2</div>
<div class="cont1a">3</div>
<div class="cont1a">4</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
<h3 class="ah3 anoi">justify-content: space-around</h3>
<div class="cont1" style="justify-content: space-around; flex-flow: row wrap;">
<div class="cont1a">1</div>
<div class="cont1a">2</div>
<div class="cont1a">3</div>
<div class="cont1a">4</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
<h3 class="ah3 anoi">justify-content: space-between</h3>
<div class="cont1" style="justify-content: space-between; flex-flow: row wrap;">
<div class="cont1a">1</div>
<div class="cont1a">2</div>
<div class="cont1a">3</div>
<div class="cont1a">4</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
<h3 class="ah3 anoi">justify-content: space-evenly</h3>
<div class="cont1" style="justify-content: space-evenly; flex-flow: row wrap;">
<div class="cont1a">1</div>
<div class="cont1a">2</div>
<div class="cont1a">3</div>
<div class="cont1a">4</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
</body>
</html>
output 📌
You can Try the above code by changing the values in our user-friendly code editor by clicking the "Try It" button and see the output of the same.
<!DOCTYPE html>
<html>
<head>
<style>
</style>
</head>
<body>
<h3 class="ah3 anoi">align-items: stretch (default value)</h3>
<div class="cont1" style="align-items: stretch; height: 150px;">
<div class="cont1a">1</div>
<div class="cont1a">2</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
<h3 class="ah3 anoi">align-items: flex-start</h3>
<div class="cont1" style="align-items: flex-start; height: 150px;">
<div class="cont1a">1</div>
<div class="cont1a">2</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
<h3 class="ah3 anoi">align-items: flex-end</h3>
<div class="cont1" style="align-items: flex-end; height: 150px">
<div class="cont1a">1</div>
<div class="cont1a">2</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
<h3 class="ah3 anoi">align-items: center</h3>
<div class="cont1" style="align-items: center; height: 150px">
<div class="cont1a">1</div>
<div class="cont1a">2</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
<h3 class="ah3 anoi">align-items: baseline / first baseline</h3>
<div class="cont1" style="align-items: baseline; height: 150px">
<div class="cont1a" style="height: 50px;">1</div>
<div class="cont1a">2</div>
<div class="cont1a">3</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
<h3 class="ah3 anoi">align-items: last baseline</h3>
<div class="cont1" style="align-items: last baseline; height: 150px">
<div class="cont1a" style="height: 50px;">1</div>
<div class="cont1a">2</div>
<div class="cont1a">3</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
</body>
</html>
output 📌
You can Try the above code by changing the values in our user-friendly code editor by clicking the "Try It" button and see the output of the same.
<!DOCTYPE html>
<html>
<head>
<style>
</style>
</head>
<body>
<h3 class="ah3 anoi">align-content: flex-start (default value)</h3>
<div class="cont1" style="align-content: flex-start; flex-flow: row wrap; height: 150px">
<div class="cont1a">1</div>
<div class="cont1a">2</div>
<div class="cont1a">3</div>
<div class="cont1a">4</div>
<div class="cont1a">5</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
<h3 class="ah3 anoi">align-content: flex-end</h3>
<div class="cont1" style="align-content: flex-end; flex-flow: row wrap; height: 150px">
<div class="cont1a">1</div>
<div class="cont1a">2</div>
<div class="cont1a">3</div>
<div class="cont1a">4</div>
<div class="cont1a">5</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
<h3 class="ah3 anoi">align-content: center</h3>
<div class="cont1" style="align-content: center; flex-flow: row wrap; height: 150px">
<div class="cont1a">1</div>
<div class="cont1a">2</div>
<div class="cont1a">3</div>
<div class="cont1a">4</div>
<div class="cont1a">5</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
<h3 class="ah3 anoi">align-content: space-around</h3>
<div class="cont1" style="align-content: space-around; flex-flow: row wrap; height: 150px">
<div class="cont1a">1</div>
<div class="cont1a">2</div>
<div class="cont1a">3</div>
<div class="cont1a">4</div>
<div class="cont1a">5</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
<h3 class="ah3 anoi">align-content: space-between</h3>
<div class="cont1" style="align-content: space-between; flex-flow: row wrap; height: 150px">
<div class="cont1a">1</div>
<div class="cont1a">2</div>
<div class="cont1a">3</div>
<div class="cont1a">4</div>
<div class="cont1a">5</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
<h3 class="ah3 anoi">align-content: space-evenly</h3>
<div class="cont1" style="align-content: space-evenly; flex-flow: row wrap; height: 150px">
<div class="cont1a">1</div>
<div class="cont1a">2</div>
<div class="cont1a">3</div>
<div class="cont1a">4</div>
<div class="cont1a">5</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
</body>
</html>
output 📌
You can Try the above code by changing the values in our user-friendly code editor by clicking the "Try It" button and see the output of the same.
<!DOCTYPE html>
<html>
<head>
<style>
</style>
</head>
<body>
<h3 class="ah3 anoi">align-self: auto</h3>
<div class="cont1" style="height: 150px">
<div class="cont1a">1</div>
<div class="cont1a" style="align-self: auto;" >2</div>
<div class="cont1a">3</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
<h3 class="ah3 anoi">align-self: flex-start</h3>
<div class="cont1" style="height: 150px">
<div class="cont1a">1</div>
<div class="cont1a" style="align-self: flex-start;" >2</div>
<div class="cont1a">3</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
<h3 class="ah3 anoi">align-self: flex-end</h3>
<div class="cont1" style="height: 150px">
<div class="cont1a">1</div>
<div class="cont1a" style="align-self: flex-end;" >2</div>
<div class="cont1a">3</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
<h3 class="ah3 anoi">align-self: center</h3>
<div class="cont1" style="height: 150px">
<div class="cont1a">1</div>
<div class="cont1a" style="align-self: center;" >2</div>
<div class="cont1a">3</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
</body>
</html>
output 📌
You can Try the above code by changing the values in our user-friendly code editor by clicking the "Try It" button and see the output of the same.
<!DOCTYPE html>
<html>
<head>
<style>
</style>
</head>
<body>
<h3 class="ah3 anoi">flex-grow: 0</h3>
<div class="cont1" style="height: 150px">
<div class="cont1a">1</div>
<div class="cont1a" style="flex-grow: 0;" >2</div>
<div class="cont1a">3</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
<h3 class="ah3 anoi">flex-grow: 1</h3>
<div class="cont1" style="height: 150px">
<div class="cont1a">1</div>
<div class="cont1a" style="flex-grow: 1;" >2</div>
<div class="cont1a">3</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
</body>
</html>
output 📌
You can Try the above code by changing the values in our user-friendly code editor by clicking the "Try It" button and see the output of the same.
<!DOCTYPE html>
<html>
<head>
<style>
</style>
</head>
<body>
<h3 class="ah3 anoi">flex-shrink: 0</h3>
<div class="cont1" style="height: 150px; flex-flow: row nowrap;">
<div class="cont1a">1</div>
<div class="cont1a" style="flex-shrink: 0;" >2</div>
<div class="cont1a">3</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
<h3 class="ah3 anoi">flex-shrink: 1</h3>
<div class="cont1" style="height: 150px">
<div class="cont1a">1</div>
<div class="cont1a" style="flex-shrink: 1;" >2</div>
<div class="cont1a">3</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
<h3 class="ah3 anoi">flex-shrink: 2</h3>
<div class="cont1" style="height: 150px">
<div class="cont1a">1</div>
<div class="cont1a" style="flex-shrink: 2;" >2</div>
<div class="cont1a">3</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
</body>
</html>
output 📌
You can Try the above code by changing the values in our user-friendly code editor by clicking the "Try It" button and see the output of the same.
<!DOCTYPE html>
<html>
<head>
<style>
</style>
</head>
<body>
<h3 class="ah3 anoi">flex: 0 0 80px</h3>
<div class="cont1" style="height: 150px">
<div class="cont1a">1</div>
<div class="cont1a" style="flex: 0 0 80px;" >2</div>
<div class="cont1a">3</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
<h3 class="ah3 anoi">flex: 0 0 80px</h3>
<div class="cont1" style="height: 150px">
<div class="cont1a">1</div>
<div class="cont1a" style="flex: 1 1 80px;" >2</div>
<div class="cont1a">3</div>
</div> <br> <hr style="border: 1px solid darkcyan;"> <br>
</body>
</html>
output 📌
You can Try the above code by changing the values in our user-friendly code editor by clicking the "Try It" button and see the output of the same.
<!DOCTYPE html>
<html>
<head>
<style>
.cont2 {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
align-items: center;
height: 300px;
background-color: #f0f0f0;
}
.item {
background: #2196f3;
color: white;
padding: 20px;
margin: 10px;
flex: 1 1 200px;
}
</style>
</head>
<body>
<div class="cont2">
<div class="item">Box 1</div>
<div class="item">Box 2</div>
<div class="item">Box 3</div>
</div>
</body>
</html>
output 📌
You can Try the above code by changing the values in our user-friendly code editor by clicking the "Try It" button and see the output of the same.
What's happening:
Flexbox simplifies layout design in CSS. It adapts to screen sizes, aligns content easily, and reduces the need for complex floats or positioning. By understanding each property clearly, you can build cleaner and more responsive layouts.
The default is 'row'.
Yes, using 'align-items: center' or 'align-self: center'.
'flex-grow' controls how items expand; 'flex-shrink' controls how they shrink.
Flexbox is great for one-dimensional layouts (row or column). Use Grid for two-dimensional layouts.