Web · Flexbox Intro
Flex Container and Items
The full text of this chapter, to read or revisit. To practise, do the exercises.
▶ Do the exercises
Exercise 1 — Introduction to Flexbox
Flexbox (Flexible Box Layout) is a CSS layout model that makes it easier to design flexible responsive layouts. It helps you arrange elements in a predictable way, especially when their size is unknown or dynamic.
Flexbox works with two main concepts: 1. Flex Container - The parent element with
display: flex
applied 2. Flex Items - The direct children of the flex container
Exercise 2 — The Flex Container
To create a flex container, you simply apply
display: flex
to an element. This transforms the element into a flex container and its direct children into flex items.
Let's compare how elements behave before and after applying flexbox:
<!DOCTYPE html> <html> <head> <style> .box { background-color: #f0f0f0; border: 2px solid #333; padding: 10px; margin-bottom: 20px; } .flex-container { display: flex; } .item { background-color: #3498db; color: white; margin: 5px; padding: 10px; } </style> </head> <body> <h3>Without Flexbox (regular block elements):</h3> <div class="box"> <div class="item">Item 1</div> <div class="item">Item 2</div> <div class="item">Item 3</div> </div> <h3>With Flexbox (display: flex):</h3> <div class="box flex-container"> <div class="item">Item 1</div> <div class="item">Item 2</div> <div class="item">Item 3</div> </div> </body> </html>
Key points about flex containers: 1. By default, flex items are arranged in a row (left to right) 2. Items only take up as much space as they need (unlike block elements) 3. You can also use
display: inline-flex
to make the container behave like an inline element
Benefits of Flexbox Containers
Flexbox solves many common layout problems: - Centering elements vertically and horizontally - Making items take up equal space - Reordering elements without changing HTML - Creating flexible layouts that adapt to screen sizes
Exercise 3 — Creating a Flex Container
Which CSS property correctly creates a flex container?
Options
• ```display: flex;```
• ```position: flex;```
• ```flex: container;```
• ```flex-display: on;```
Hint : The correct way to create a flex container is with the display property.
Exercise 4 — Flex Direction
By default, flex items are arranged in a row from left to right. You can change this using the
flex-direction
property on the container.
The
flex-direction
property has four possible values: -
row
(default): Items flow horizontally from left to right -
row-reverse
: Items flow horizontally from right to left -
column
: Items flow vertically from top to bottom -
column-reverse
: Items flow vertically from bottom to top
<!DOCTYPE html> <html> <head> <style> .container { display: flex; background-color: #f0f0f0; border: 2px solid #333; padding: 10px; margin-bottom: 20px; } .row { flex-direction: row; /* default */ } .column { flex-direction: column; } .item { background-color: #3498db; color: white; margin: 5px; padding: 10px; text-align: center; } </style> </head> <body> <h3>flex-direction: row (default)</h3> <div class="container row"> <div class="item">Item 1</div> <div class="item">Item 2</div> <div class="item">Item 3</div> </div> <h3>flex-direction: column</h3> <div class="container column"> <div class="item">Item 1</div> <div class="item">Item 2</div> <div class="item">Item 3</div> </div> </body> </html>
Exercise 5 — Setting Flex Direction
Complete the CSS to make the flex items stack vertically from top to bottom.
.container { display: flex; ____ ____; }
Options: flex-direction: column row vertical column-reverse row-reverse
Hint : To make flex items stack vertically, you need to set the flex-direction property to change the main axis from horizontal to vertical.
Exercise 6 — Understanding Flex Items
Flex items are the direct children of a flex container. They have special properties that control how they behave within the flex layout.
By default, flex items: 1. Line up in a row (unless flex-direction is changed) 2. Start from the beginning of the main axis 3. Do not stretch to fill the container 4. Size themselves according to their content
<!DOCTYPE html> <html> <head> <style> .container { display: flex; background-color: #f0f0f0; border: 2px solid #333; padding: 10px; height: 150px; /* Fixed height to show alignment */ } .item { background-color: #3498db; color: white; margin: 5px; padding: 20px; text-align: center; } .item-2 { background-color: #e74c3c; padding: 30px; /* Different size to show default behavior */ } .item-3 { background-color: #2ecc71; padding: 10px; /* Different size to show default behavior */ } </style> </head> <body> <div class="container"> <div class="item">Item 1</div> <div class="item item-2">Item 2</div> <div class="item item-3">Item 3</div> </div> </body> </html>
Exercise 7 — Flex Items Behavior
Which statement is true about flex items (the direct children of a flex container)?
Options
• By default, flex items align in a row and only take up as much space as they need
• Flex items always stretch to fill the entire container
• Flex items always stack vertically by default
• Only div elements can be flex items
Hint : Remember the default behavior of flex items - they follow the container's flex-direction (row by default) and size themselves based on content.
Exercise 8 — Flex Container vs Flex Items
Match each property with whether it applies to a flex container or flex items:
Items to match
• display: flex;
• flex-direction: column;
• Direct children of a flex container
• The element that has display: flex applied to it
Definitions
• Flex Container
• Flex Container
• Flex Items
• Flex Container
Exercise 9 — Reverse Flex Directions
In addition to
row
and
column
, flexbox provides reversed directions:
row-reverse
and
column-reverse
.
These reversed directions flip the order of the flex items while maintaining the same main axis:
<!DOCTYPE html> <html> <head> <style> .container { display: flex; background-color: #f0f0f0; border: 2px solid #333; padding: 10px; margin-bottom: 20px; } .row-reverse { flex-direction: row-reverse; } .column-reverse { flex-direction: column-reverse; height: 200px; /* Adding height for better visualization */ } .item { background-color: #3498db; color: white; margin: 5px; padding: 10px; text-align: center; width: 70px; } </style> </head> <body> <h3>Regular row (left to right)</h3> <div class="container"> <div class="item">Item 1</div> <div class="item">Item 2</div> <div class="item">Item 3</div> </div> <h3>row-reverse (right to left)</h3> <div class="container row-reverse"> <div class="item">Item 1</div> <div class="item">Item 2</div> <div class="item">Item 3</div> </div> <h3>column-reverse (bottom to top)</h3> <div class="container column-reverse"> <div class="item">Item 1</div> <div class="item">Item 2</div> <div class="item">Item 3</div> </div> </body> </html>
Exercise 10 — Setting Flex Direction
Complete the CSS to create a flex container where the items flow from right to left.
.container { display: flex; ____ ____; }
Options: flex-direction: row-reverse column column-reverse row
Hint : Think about which flex-direction value would cause items to flow horizontally but in the opposite direction from normal.
Back to the course