CSS Flexbox: A Complete Guide

Download Now: Free WordPress Website Guide + Checklist
Clint Fontanella
Clint Fontanella



If you've ever tried to create a layout with CSS, you know that it can be a bit of a struggle to get everything to line up just right. That's where the CSS flex property comes in.

web developer using the css flexbox property

Introduced in CSS3, the flexbox layout module provides a more efficient way to arrange elements on a page.

But what exactly is flexbox, and how can you use it to make your web designs more responsive and dynamic? In this post, we'll dive into the basics of the CSS flex property and explore some examples that demonstrate its use.

Download Now: 25 HTML & CSS Hacks [Free Guide]

Table of Contents

What is the CSS Flex property?

The flex property is a versatile command that enables developers to create flexible and adaptive layouts for web pages. This property allows elements of a webpage to be sized and arranged relative to one another, rather than having to specify exact dimensions.

The flex property is actually a shorthand property for a few other flex properties:

  • flex-grow
  • flex-shrink
  • flex-basis

These determine the length of an element and whether it will grow or shrink based on the other elements in the container.

The flex property is particularly useful for responsive design, as it allows elements to be scaled and rearranged based on the size of the screen. For example, a row of images on a desktop screen can be easily rearranged into a column on a mobile device, simply by changing the flex-direction property from row to column.


Another key benefit is its ability to simplify and reduce the amount of code required to create responsive layouts. With flex, it's possible to create complex, multi-column designs with fewer lines of code than traditional techniques like floats and positioning.

CSS Flex Syntax

The flex property works by setting a parent element to display: flex, which then gives you access to a number of other flexible layout properties. Two of the most popular properties are justify-content and align-items. Justify-content determines how the items within a flex container are spaced out along the main axis, while align-items control their position along the cross-axis.

Let’s take a look at a few examples of this syntax. Here is the basic keyword syntax for the CSS flex property:

flex: auto; flex: initial; flex: none;

You can also define the flex property using percentages, ems, and pixels. There are also a few global values that you can use with this property as well:

  • Inherit
  • Unset
  • Revert

Let’s review what each of these values does in more detail.

CSS Flex Property Values

1. Auto

This value sets the flex-basis to auto which means that the item will be sized based on its content, and can grow or shrink as needed.


In this example, the item will be given a default size based on its content and will be allowed to grow or shrink as needed.

.item { flex: 1 1 auto; }

2. Initial

This value sets the flex item's properties to their default or initial value. 


.item { flex: initial; }

In this example, the item will have a flex-basis of 0, and will be allowed to shrink or grow by an equal percentage.

3. None

This value sets the item's flex container to 0, which means it will neither grow nor shrink when extra space or a lack of space exists.


.item { flex: none; }

In this example, the item will have a fixed, non-flexible size.

4. Inherit

This value sets the item's flex properties to be inherited from its parent property.


.item { flex: inherit; }

In this example, the item will have the same flex properties as its parent property.

5. Unset

This value sets the item's flex properties to the default value if not previously set; otherwise, it sets it to the inherited value.


.item { flex: unset; }

In this example, the item will inherit its flex properties, or revert to the default value if not explicitly set.

6. Revert

This value sets the item's flex properties to their default values as if no value had ever been set.


.item { flex: revert; }

In this example, the item's flexbox properties will revert back to their original default values.

CSS Flex Parent & Child Properties 

Below are the different CSS flex properties for both parent and child elements. Let’s review what each one does, then look at an example where they are used in action.

CSS Flex Parent Properties

1. Display

This property defines the container type you want to create. The default value is block. To enable flexbox, you would set the display property for the container element to flex or inline-flex, depending on your layout needs.

2. Align-items

This property controls how the items inside the flex container align along the cross-axis (the perpendicular axis to the main-axis direction). It allows you to align items either at the start, center, end, or stretch across the cross-axis.

3. Flex-Flow

This property is a shorthand for two other properties, flex-direction and flex-wrap. It defines the direction in which the flex items flow and whether they should wrap or not. The default value is row nowrap, which means the items flow horizontally in a single line without wrapping.

4. Flex-Wrap

This property controls whether the flex items should wrap or not when they exceed the width of the flex container. You can set the value to nowrap (default), wrap, or wrap-reverse, depending on your layout needs.

5. Justify-Content

This property controls how the items inside the flex container align along the main axis (the axis in which the flex-direction flows). It allows you to align the items either at the start, center, end, space-between, space-around, or space-evenly of the main axis.

CSS Flex Child Properties

6. Order

This property lets you define the order of the flex items, controlling the layout order regardless of the source order in the HTML markup.

7. Flex-Grow

This property sets how much the flex item should grow relative to other flex items when there is unused space along the main axis. The larger the value, the larger the item will proportionally grow.

8. Flex-Shrink

This property sets how much the flex item should shrink relative to other flex items when there is not enough space along the main axis. The larger the value, the smaller the item will proportionally shrink.

9. Flex-Basis

This property sets the initial size of the flex item along the main axis before any remaining space is distributed. It can be set to a specific value (such as pixels) or a keyword (such as auto, which uses the element's default size).

Now that we have gone over the most popular CSS flex properties and their potential values, let’s see them put into action in an example.

CSS Flex Property Example

Say we have a container <div> element with three child <div> elements, each representing an item.

If we add the display: flex property on the container, it will enable the flexbox layout for its children. Assigning the flex: 1 property to the child items allows them to grow and occupy equal space within the container. To ensure items are spaced evenly, you can add the justify-content: space-between property to your stylesheet. Lastly, add some other styling properties, such as padding, background color, and borders, for a more elaborate visual representation.

Here is your end code:

See the Pen CSS Flexbox by HubSpot (@hubspot) on CodePen.

In the explanation above, we mentioned that this created a “flexbox layout.” Let’s talk more about what this is in the next section.

The CSS Flexbox, Explained

The CSS flexbox is a layout module that creates complex, multi-column designs using very little code. Unlike the CSS grid, which is a two-dimensional layout system, the flexbox is one-dimensional that focuses on arranging elements along a single axis (either horizontally or vertically).

One of the key benefits of the CSS flexbox is that it can simplify your code and make layouts more scalable. You can create layouts that adapt to different screen sizes and devices, ensuring that your site looks great no matter how your users are accessing it. This can be particularly important for mobile users, who may be accessing your site on a range of different devices and screens.

How to Use CSS Flexbox

To start, set the container to display: flex. Now you can use different properties like flex-wrap and flex-basis to define how the child elements should be arranged. This allows you to control the positioning and sizing of elements on your page with ease, without the need for complex calculations or adjustments.

Let’s look at an example.

CSS Flexbox Example

Suppose you want to create a responsive, two-column layout for your website's homepage. One column will contain a heading and some introductory text, while the other will contain a contact form.

To start, you'll need to create a container that will hold your two columns. You can do this by adding the following CSS:

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

The display: flex property sets your container to be a flexbox element. The flex-wrap property tells the container to wrap its child elements onto the next line if there's not enough space for them on the first line.

Now, create two child elements, one for each column. You can do this using the following code:

.column { flex-basis: 50%; padding: 20px; box-sizing: border-box; }


Here, the flex-basis property sets the width of each column to be 50% of the container width, so they will be equal in size. The padding and box-sizing properties are used to add padding to the columns without affecting their total width.

Now that you've set up your container and your columns, you can start adding content. Here's an example of what your HTML might look like:

See the Pen CSS Flexbox 2 by HubSpot (@hubspot) on CodePen.

And that's it. With just a few lines of CSS and some simple HTML, you can create a responsive, two-column layout using the CSS flexbox. You can further customize your layout by adjusting the properties mentioned above to fine-tune the behavior of the flexbox container and its child elements.

Using the CSS Flex Property

The CSS flex property is a powerful tool for creating versatile and responsive layouts in your web projects. With its comprehensive set of properties and options, the flexbox layout module enables designers and developers to create complex and dynamic designs that can adapt to different screen sizes, devices, and user interactions.

Whether you're building a simple landing page or an advanced web application, mastering the basics of the CSS flex property is an essential step towards building more efficient and effective web designs.


Related Articles


Launch your WordPress website with the help of this free guide and checklist.


    CMS Hub is flexible for marketers, powerful for developers, and gives customers a personalized, secure experience