đź“šTABLE OF CONTENTS
🖋️ Introduction to CSS Flexbox
CSS Flexbox is the ultimate solution for all your layout woes. In this article, we’re focusing entirely on mastering Flexbox, exploring it's properties and how you can use it to create stunning, responsive designs with ease. Let’s dive in and make those layouts seamless.
The Flexible Box Layout, or Flexbox, is a one-dimensional layout method that arranges items along a single axis, either a row or a column. If you are a visual learner like me, that probably didn't make a lot of sense, so let me paint you a picture -
Imagine you have a box filled with your favorite things, it could be books or your favorite snacks, whatever rocks your boat, but they’re in complete chaos. Flexbox is like a magical organizer with a pinch of OCD that swoops in to save the day. It neatly arranges everything in rows and columns that fit your exact needs.
Whether you want your items spaced out equally, grouped to one side, or centered perfectly, Flexbox is your go-to. Now that we know Flexbox is the organizer with OCD, let’s dive into the tools it uses to make the magic happen! Here are it's essential properties:
1. display: flex
: This is where it all begins! By adding this property to a container (Box filled with your favorite snacks), all your snacks (child elements) will line up neatly along a single axis by default, that’s a row. But don’t worry, you can switch to a column if you prefer!"
Note: To interact with the CodePen examples, click on the "Edit on CodePen" text at the top-right corner of the illustration. This allows you to play around with the code live!
Experiment with values on CodePen:
2. flex-direction: This decides which direction your snacks will line up in. Remember by default, the snacks lines up in a row, but flex direction gives you the power to change that. Here are it's values:
a. row(default): Your snacks line up in a neat row from left to right.
b. row-reverse: The items flip direction and line up from right to left, perfect for when you feel a little rebellious!
c. column: Your items stack up vertically, just like a snack tower! Imagine each snack (or flex item) being placed one on top of the other, forming a delicious snack tower.
d. column-reverse: The stack starts from the bottom and builds up.
Here's an illustration, feel free to change the flex-direction values so you can see how they work.
3. Justify-content: This is the flex container's magic wand and it uses it to distribute space between the snacks. it sorts of decides how the snacks are arranged in the snack box. Here are it's main options:
a. flex-start(default): All snacks gather at the start of the row or column.
b. flex-end: All snacks gather at the end of the row or column.
c. center: Snacks gather together in the middle of the row or column.
d. space-between: The first snack is pushed to the start, the last snack is pushed to the end, and the rest are spaced evenly between them.
e. space-around: The snacks get equal space around them.
f. space-evenly: Snacks enjoy perfectly equal space all around.
Here's an illustration, feel free to change the justify-content values so you can see how they work.
4. Align-items: We've already arranged our snacks in a row or column using flex-direction, now it is time to decide how high or how low we want them to sit in the snack container. Here are it's common values:
a. flex-start: Aligns items at the start of the cross axis.
b. flex-end: Aligns items at the end of the cross axis.
c. center: Centers items along the cross axis.
d. stretch: Stretches items to fill the container (default for block-level items).
e. baseline: Aligns items along their text baseline.
Let's see Align-Items in Action.
Explore the Code Pen below to see the magic in action! Feel free to tweak the CSS to see how it changes the alignment.
1. Align-content: The align-content property specifies how multiple rows of flex items (or snacks in our analogy) are spaced along the cross-axis within the flex container (snack container). It comes into play only when there are multiple rows or columns of flex items, meaning your flex container must have wrapped content (flex-wrap: wrap
).
Values of Align-content
a. flex-start: All rows of snacks are gathered at the top of the snack container leaving the rest of the container feeling rather empty.
b. flex-end: Rows of snacks are gathered at the bottom of the snack container, thereby leaving empty space at the top (lonely at the top).
c. center: Rows of snacks are gathered in the middle, leaving empty space at the top and bottom of our snack container.
d. space-between: Rows of snacks are spaced evenly with the first row at the top and the last row at the bottom.
e. space-around: Rows are spaced with equal gaps between rows.
f. space-evenly: Rows have equal space between them.
g. stretch(default): Our snacks all "stretch" to fill the snack container's height.
Enough with words, let's flex into action (see what I did there? No one? Okay 🤷‍♀️).
You can replace the align-content value with flex-start, flex-end, center, space-between, space-around, space-evenly, or stretch to observe the changes.
Check out this CodePen for an interactive illustration!
🤔 Align-items vs. Align-content: What’s the Difference?
Although they sound similar, align-items and align-content are not the same. Let’s clarify the difference:
align-items aligns individual flex items along the cross-axis. Think of it as setting alignment for the items themselves within a single row/column.
align-content aligns multiple rows of items (when wrapping is active, i.e., flex-wrap: wrap
) along the cross-axis of the flex container.
🔑 Key Takeaway:
align-items deals with all items within a single flex container, while align-content handles multiple rows of items (only when there are multiple wrapped rows).
** Remember**:
Property | Focus Area | When to use |
---|---|---|
Align-items | Align individual items | When you are adjusting the vertical alignment of single items |
Align-content | Align rows of items | When flex-wrap: wrap is used (and there are multiple rows) |
2. Flex-wrap: This property decides whether your flex items (aka your favorite snacks) should all squeeze into one row/column or politely wrap onto multiple rows/columns when they run out of space.
Here are it's values:
a. nowrap(default): Your snacks decide they do not want breathing space and just stay cramped in a row/column.
b. wrap: Now, they want breathing space, so they spill onto the next row or column when there is no more space in the first row/column.
c .wrap-reverse: Pretty much the same as wrap but they do it in a reverse manner. Bottom-to-top or right-to-left, depending on the flex direction.
Here's a CodePen that demonstrates the behavior of the flex-wrap property. You can experiment with the different values (nowrap, wrap, and wrap-reverse) to see how the flex container handles the overflow of snacks.
3. Flex: This is a deciding property that sets how a flex item(our snack) will grow or shrink to fit the available space in it's flex container. It is a shorthand for 3 sub-properties:
a. flex-grow: Determines how much a flex-item will grow.
b. flex-shrink: Decides how much a flex-item will shrink when space is tight.
c. flex-basis: Determines the starting size before items start to grow or shrink.
Here’s a CodePen demonstrating the flex property and its components
Feel free to open and interact with it to see how adjusting flex values changes the layout of the items.
4. Align-self: This property overrides the flex container's align items value. it basically aligns the item on the cross axis. Here are it's values:
a. auto (default): Inherits alignment from the container’s align-items property.
b. flex-start: Aligns the item at the start of the cross-axis.
c. flex-end: Aligns the item at the end of the cross-axis.
d. center: Centers the item along the cross-axis.
e. stretch: Stretches the item to fill the cross-axis (if not fixed-sized).
f. baseline: Aligns the item along its text baseline.
Check out this CodePen for an interactive illustration!
🎉 Conclusion
CSS Flexbox simplifies the way we approach layouts. With a few key properties like display: flex
, flex-direction
, justify-content
, and align-items
, you can make responsive and beautifully aligned designs with ease.
đź’ˇ Want to dive deeper? Here are some fantastic resources:
A detailed guide covering every Flexbox property and use-case.
Official documentation with explanations, examples, and browser compatibility.
The key to mastering anything is consistent practice, so make sure to practice as much as you can to solidify your understanding. The more you play with these tools, the more confident you'll become in your ability to create beautiful layouts.
Until next time, your friendly neighborhood writer (yes, it makes sense in my head). đź‘‹ Bye!!!
Top comments (0)