CSS Flexbox is a powerful layout module that provides an efficient way to align and distribute space among items in a container, even when their size is unknown or dynamic. The attached mind map outlines the key properties for Flexbox containers and items. This tutorial will explain each property in detail, providing examples to help you master Flexbox layouts.
Understanding Flexbox Basics
Flexbox operates with two main components:
-
Flex Container: The parent element with
display: flex
ordisplay: inline-flex
applied. - Flex Items: The direct children of the flex container.
The properties are divided into Flex Container Properties (applied to the container) and Flex Items Properties (applied to the items). Let’s explore each one.
Flex Container Properties
These properties are set on the flex container to control the layout and behavior of its items.
1. Flex Direction
- Description: Defines the main axis direction in which flex items are placed.
-
Values:
-
row
(default): Left to right. -
row-reverse
: Right to left. -
column
: Top to bottom. -
column-reverse
: Bottom to top.
-
- Example:
.container {
display: flex;
flex-direction: column;
}
This stacks items vertically.
2. Flex Wrap
- Description: Controls whether flex items wrap to new lines when they exceed the container’s width.
-
Values:
-
nowrap
(default): All items stay on one line. -
wrap
: Items wrap to multiple lines. -
wrap-reverse
: Items wrap in reverse order.
-
- Example:
.container {
display: flex;
flex-wrap: wrap;
}
This allows items to wrap onto new lines as needed.
3. Flex Flow
-
Description: A shorthand for
flex-direction
andflex-wrap
. -
Values: Combines any value from
flex-direction
andflex-wrap
(e.g.,row wrap
). - Example:
.container {
display: flex;
flex-flow: column wrap;
}
This sets a vertical direction with wrapping.
4. Justify Content
- Description: Aligns flex items along the main axis.
-
Values:
-
flex-start
(default): Items align to the start. -
flex-end
: Items align to the end. -
center
: Items align to the center. -
space-between
: Evenly spaced with items at edges. -
space-around
: Evenly spaced with half-size gaps at edges. -
space-evenly
: Evenly spaced with equal gaps.
-
- Example:
.container {
display: flex;
justify-content: space-between;
}
This distributes items evenly with no gaps at the edges.
5. Align Items
- Description: Aligns flex items along the cross axis.
-
Values:
-
stretch
(default): Items stretch to fill the container. -
flex-start
: Items align to the start. -
flex-end
: Items align to the end. -
center
: Items align to the center. -
baseline
: Items align to their baselines.
-
- Example:
.container {
display: flex;
align-items: center;
}
This centers items vertically in a row layout.
6. Align Content
-
Description: Aligns flex lines when there are multiple lines (requires
flex-wrap: wrap
). -
Values:
-
stretch
(default): Lines stretch to fill the container. -
flex-start
: Lines align to the start. -
flex-end
: Lines align to the end. -
center
: Lines align to the center. -
space-between
: Evenly spaced lines. -
space-around
: Evenly spaced with half-size gaps. -
space-evenly
: Evenly spaced with equal gaps.
-
- Example:
.container {
display: flex;
flex-wrap: wrap;
align-content: space-around;
}
This spaces multiple lines evenly with gaps.
7. Gap
- Description: Sets the gap (gutter) between rows and columns of flex items.
-
Values: A length (e.g.,
10px
,2em
) or percentage. - Example:
.container {
display: flex;
flex-wrap: wrap;
gap: 20px;
}
This adds a 20px gap between items.
Flex Items Properties
These properties are set on individual flex items to control their size and alignment within the container.
1. Order
- Description: Defines the order of flex items along the main axis.
-
Values: Integer (default is
0
); lower numbers appear first. - Example:
.item {
order: 2;
}
This moves the item to the second position.
2. Align Self
-
Description: Overrides
align-items
for a specific item along the cross axis. -
Values:
auto
(default),flex-start
,flex-end
,center
,baseline
,stretch
. - Example:
.item {
align-self: flex-end;
}
This aligns the item to the bottom in a row layout.
3. Flex Grow
- Description: Defines how much a flex item can grow relative to others when extra space is available.
-
Values: Number (default is
0
); higher values grow more. - Example:
.item {
flex-grow: 1;
}
This allows the item to expand and fill available space.
4. Flex Shrink
- Description: Defines how much a flex item can shrink relative to others when space is limited.
-
Values: Number (default is
1
); higher values shrink more. - Example:
.item {
flex-shrink: 0;
}
This prevents the item from shrinking.
Putting It All Together: A Practical Example
Let’s create a simple Flexbox layout with a container and three items:
<div class="container">
<div class="item">Item 1</div>
<div class="item">Item 2</div>
<div class="item">Item 3</div>
</div>
.container {
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: space-around;
align-items: center;
align-content: space-between;
gap: 15px;
height: 300px;
border: 1px solid #ccc;
}
.item {
width: 100px;
height: 100px;
background-color: lightblue;
text-align: center;
line-height: 100px;
}
.item:nth-child(2) {
order: 3;
align-self: flex-end;
flex-grow: 2;
flex-shrink: 0;
}
-
Explanation: The container uses
flex-direction: row
andflex-wrap: wrap
to arrange items horizontally with wrapping.justify-content: space-around
spaces items evenly,align-items: center
centers them vertically, andalign-content: space-between
spaces multiple lines. Thegap
adds 15px spacing. The second item is reordered to the end (order: 3
), aligned to the bottom (align-self: flex-end
), grows to fill space (flex-grow: 2
), and doesn’t shrink (flex-shrink: 0
).
Best Practices
-
Test Responsiveness: Use
flex-wrap
andgap
to ensure layouts adapt to different screen sizes. -
Avoid Overusing Grow/Shrink: Set
flex-grow
andflex-shrink
thoughtfully to prevent unintended stretching or compression. -
Combine Properties: Use shorthands like
flex-flow
and experiment with combinations for efficiency. - Debug with DevTools: Use browser developer tools to visualize Flexbox properties and adjust live.
Conclusion
Mastering Flexbox container and item properties empowers you to create flexible, responsive layouts with ease. Whether you’re aligning items, controlling their order, or managing space, properties like flex-direction
, justify-content
, order
, and flex-grow
offer the tools you need. Practice with the examples above, and you’ll be building complex layouts confidently in no time.
Top comments (0)