Css Flex Container And Flex Items Properties Complete Guide

 Last Update:2025-06-22T00:00:00     .NET School AI Teacher - SELECT ANY TEXT TO EXPLANATION.    8 mins read      Difficulty-Level: beginner

Understanding the Core Concepts of CSS Flex Container and Flex Items Properties

CSS Flex Container and Flex Items Properties

Displaying Flex Containers and Flex Items

Flex Container:

The first step to utilizing Flexbox is to define a flex container. This is done using the display property, which can have the following values:

  • display: flex;
  • display: inline-flex;

These values transform the selected element into a flex container, thus making its direct children flex items. flex creates a block-level flex container, whereas inline-flex results in an inline-level flex container.

Flex Items:

Once a flex container is established, any direct child of this container becomes a flex item. Flex items can adjust their width and height in order to fill the available space.

Aligning Flex Items

Several aligning properties are essential within Flexbox to control both the flow and the positioning of flex items inside the flex container.

  • justify-content: Determines how flex items are distributed along the main axis (horizontally if direction is row). Options include:

    • flex-start: Items pushed towards the start of the container.
    • flex-end: Items pushed towards the end of the container.
    • center: Items centered along the axis.
    • space-between: Distributes items evenly, with the first item on the start line and the last item on the end line.
    • space-around: Distributes items evenly, with equal space around each item.
    • space-evenly: Distributes items evenly, with equal space on both sides of each item.
  • align-items: Governs how items are aligned vertically (or horizontally depending on the direction) across the cross-axis. Possible values are:

    • flex-start: Aligns items at the beginning of the flex container.
    • flex-end: Aligns items at the end of the flex container.
    • center: Aligns items at the center of the flex container.
    • baseline: Aligns items based on the baseline of their content.
    • stretch: Stretches items to fill the size of the flex container (default value).
  • align-self: Similar to align-items, but only applies to individual flex items within the flex container. Overrides the global align-items setting.

    • Takes the same values as align-items.

Wrapping Flex Items

  • flex-wrap: Controls whether flex items are forced to stay on one line or if multiple lines are allowed.

    • nowrap (default): All items attempt to fit onto a single line.
    • wrap: Flex items wrap onto additional lines as needed.
    • wrap-reverse: Flex items wrap onto additional lines in reverse order.

Controlling the Direction

  • flex-direction: Directs flex items along either the row or column axis. Also affects the direction of the main axis.

    • row (default): Flex items are laid out in a horizontal line.
    • row-reverse: Flex items are laid out in a horizontal line, but reversed.
    • column: Flex items are laid out in a vertical single line.
    • column-reverse: Flex items are laid out in a vertical single line, but reversed.

Ordering Flex Items

  • order: Allows you to rearrange flex items without changing the markup order.

    • Takes integer values where lower values cause the item to appear earlier in the layout sequence.

Growing and Shrinking Flex Items

  • flex-grow: Defines how much the flex item will grow relative to the rest of the items in the container when positive free space is available.

    • Takes non-negative numbers which specify the growth factor.
  • flex-shrink: Specifies how a flex item will shrink relative to the rest when negative free space is distributed.

    • Again, it takes non-negative numbers indicating the shrink factor.
  • flex-basis: Sets the initial size of a flex item before any available space is distributed.

    • Can be set to auto, a length, or a percentage.
  • flex: A shorthand property for flex-grow, flex-shrink and flex-basis combined in that order. It simplifies defining how flex items behave with space distribution.

Additional Properties for Flex Containers

  • align-content: Aligns flex items along the cross-axis when there's more than one line of flex items.

    • Options include stretch, flex-start, flex-end, center, space-between, and space-around.
  • gap/row-gap/column-gap: Control the spacing between flex items within the flex container. These values accept lengths and percentages.

Online Code run

🔔 Note: Select your programming language to check or run code at

💻 Run Code Compiler

Step-by-Step Guide: How to Implement CSS Flex Container and Flex Items Properties

Step 1: Understanding Flex Container and Flex Items

  • Flex Container: The parent element where we apply CSS properties to create a flex layout.
  • Flex Items: The child elements within the flex container that we can manipulate with flex properties.

Step 2: Creating the HTML Structure

Let's start with an HTML structure where we define a div with the class container (our flex container) and inside it, a few nested div elements (our flex items).

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CSS Flexbox Example</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <div class="container">
        <div class="item">Item 1</div>
        <div class="item">Item 2</div>
        <div class="item">Item 3</div>
    </div>
</body>
</html>

Step 3: Styling the Flex Container

In this step, we'll apply flexbox properties to the container div.

Basic Setup

Add a CSS file named styles.css and add the following code to it:

body {
    margin: 0;
    font-family: Arial, sans-serif;
    display: flex;
    justify-content: center;
    align-items: center;
    min-height: 100vh;
    background-color: #f0f0f0;
}

.container {
    display: flex;
    width: 80%;
    background-color: #fff;
    border: 2px solid #ddd;
    padding: 20px;
    border-radius: 10px;
    box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}
  • display: flex;: Converts the container into a flex container.
  • width: 80%;: Sets the width to 80% of the parent container.
  • background-color, border, padding, border-radius, box-shadow: Just for styling.

Step 4: Styling the Flex Items

We can now style the flex items.

.item {
    background-color: #007bff;
    color: #fff;
    padding: 20px;
    margin: 10px;
    text-align: center;
    border-radius: 5px;
    flex: 1;  /* This property makes each item grow to take up equal space */
}
  • background-color, color, padding, margin, text-align, border-radius: Styling properties.
  • flex: 1;: This property makes sure each flex item takes up an equal amount of space in the container.

Step 5: Flex Direction

By default, flex items are aligned in a row (left to right). Let's change the direction to column (top to bottom).

.container {
    display: flex;
    flex-direction: column;
    width: 80%;
    background-color: #fff;
    border: 2px solid #ddd;
    padding: 20px;
    border-radius: 10px;
    box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}
  • flex-direction: column;: Stacks flex items vertically.

This will change the layout so that Item 1, Item 2, and Item 3 are stacked vertically.

Step 6: Justify Content and Align Items

Let's explore how to align flex items within the container.

.container {
    display: flex;
    flex-direction: row;  /* Changed back to row for example */
    justify-content: space-between;  /* Aligns items with space between */
    align-items: center;  /* Vertically centers items */
    width: 80%;
    background-color: #fff;
    border: 2px solid #ddd;
    padding: 20px;
    border-radius: 10px;
    box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}
  • flex-direction: row;: Reverts to horizontal layout.
  • justify-content: space-between;: Distributes space between items.
  • align-items: center;: Vertically centers items inside the container.

Step 7: Flex Wrap

Sometimes, we want to wrap items when they don't fit in one row. Let's see how that works:

<div class="container">
    <div class="item">Item 1</div>
    <div class="item">Item 2</div>
    <div class="item">Item 3</div>
    <div class="item">Item 4</div>
    <div class="item">Item 5</div>
    <div class="item">Item 6</div>
    <div class="item">Item 7</div>
    <div class="item">Item 8</div>
</div>

Add some width to the items to make them wrap:

.item {
    background-color: #007bff;
    color: #fff;
    padding: 20px;
    margin: 10px;
    text-align: center;
    border-radius: 5px;
    flex-basis: 100px;  /* Sets a basic width for each item */
}

.container {
    display: flex;
    flex-direction: row;
    justify-content: space-between;
    align-items: center;
    width: 80%;
    background-color: #fff;
    border: 2px solid #ddd;
    padding: 20px;
    border-radius: 10px;
    box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
    flex-wrap: wrap;  /* Allows items to wrap to the next line */
}
  • flex-basis: 100px;: Sets a basic width for each item.
  • flex-wrap: wrap;: Allows items to wrap to the next line if they don't fit.

Summary of Flexbox Properties Used

  • display: flex;: Converts an element into a flex container.
  • flex-direction: row | column;: Sets the main axis on which the flex items will be placed.
  • justify-content: flex-start | flex-end | center | space-between | space-around | space-evenly;: Aligns flex items along the main axis.
  • align-items: flex-start | flex-end | center | baseline | stretch;: Aligns flex items along the cross axis.
  • flex-wrap: nowrap | wrap | wrap-reverse;: Defines whether the flex items should wrap if they exceed the container.
  • flex: <flex-grow> <flex-shrink> <flex-basis>;: A shorthand for setting the flexibility of flex items.

Final HTML and CSS Code

HTML (index.html):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CSS Flexbox Example</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <div class="container">
        <div class="item">Item 1</div>
        <div class="item">Item 2</div>
        <div class="item">Item 3</div>
        <div class="item">Item 4</div>
        <div class="item">Item 5</div>
        <div class="item">Item 6</div>
        <div class="item">Item 7</div>
        <div class="item">Item 8</div>
    </div>
</body>
</html>

CSS (styles.css):

Top 10 Interview Questions & Answers on CSS Flex Container and Flex Items Properties

1. What is a Flex Container?

Answer: A Flex Container is an element that is set to display: flex or display: inline-flex. It enables a flexible layout for its direct children, referred to as Flex Items. This layout system allows for easier and more efficient design of responsive web pages without the need for complex calculations.

2. How can I align all flex items to the center horizontally and vertically within a flex container?

Answer: To align all flex items to the center horizontally and vertically, you can use the properties justify-content and align-items on the flex container. Set justify-content: center for horizontal centering and align-items: center for vertical centering.

.container {
  display: flex;
  justify-content: center;
  align-items: center;
}

3. What is the difference between flex-direction: row and flex-direction: column?

Answer: flex-direction: row arranges the flex items in a horizontal line, starting from the left. This is the default value. flex-direction: column, on the other hand, arranges the flex items in a vertical column, starting from the top.

4. How do you control the spacing between flex items?

Answer: The spacing between flex items can be controlled using the gap property on the flex container. Set a value in pixels or another unit of measurement to define the space between the items.

.container {
  display: flex;
  gap: 20px;
}

5. What are Flex Grow, Flex Shrink, and Flex Basis, and how do they work together?

Answer: These properties help determine how the flex items grow or shrink to fit the available space in the flex container.

  • flex-grow: Specifies how much of the remaining space inside the flex container should be assigned to the item (relative to the other flex items).
  • flex-shrink: Specifies how the item will shrink relative to the rest of the flex items when there is not enough space in the flex container.
  • flex-basis: Specifies the initial main size of the flex item before free space is distributed according to the flex factors.
.item {
  flex-grow: 1;
  flex-shrink: 1;
  flex-basis: 100px;
}

6. How can I align a specific flex item to the end of the flex container?

Answer: You can align a specific flex item to the end using the align-self property. Set the value to flex-end.

.item {
  align-self: flex-end;
}

7. What is the purpose of the order property in CSS Flexbox?

Answer: The order property specifies the order in which flex items are laid out in the flex container. By default, items are placed in the order they appear in the source code, but the order property can be used to change this order.

.item {
  order: 2; /* Lower values mean items will appear earlier */
}

8. Can the flex-wrap property be used to create multi-line flex layouts?

Answer: Yes, the flex-wrap property can be used to allow flex items to wrap onto multiple lines if the flex container has limited space. Setting flex-wrap: wrap means that the items can wrap onto multiple lines. flex-wrap: nowrap (default) and flex-wrap: wrap-reverse (items wrap onto multiple lines starting from the top) are also options.

.container {
  display: flex;
  flex-wrap: wrap;
}

9. How can I make flex items take up equal space within the flex container?

Answer: To make flex items take up equal space within the flex container, you can set the flex property, which is a shorthand for flex-grow, flex-shrink, and flex-basis. By setting flex: 1, all flex items will take up equal space.

.item {
  flex: 1;
}

10. What is automatic sizing in flexbox, and how is it different from exiting with flex_basis: 0?

Answer: Automatic sizing in Flexbox occurs when the flex-basis is set to auto. In this case, the flex item's base size is determined by its content size. Setting flex-basis: 0 changes the base size of the item to 0, allowing flex-grow to distribute all available space according to the flex grow factors.

You May Like This Related .NET Topic

Login to post a comment.