Delving Developer

Flex Your Web Design Muscles with CSS Flexbox: A Comprehensive Guide

Eddie Cunningham
Eddie Cunningham
6 min readCSS
Cover Image for Flex Your Web Design Muscles with CSS Flexbox: A Comprehensive Guide

CSS flexbox is a layout module that provides a more efficient way to layout, align and distribute space among items in a container, even when their size is unknown or dynamic. Flexbox has become one of the most popular ways to create modern layouts on the web, and with good reason. It is incredibly powerful and versatile, allowing developers to create complex and dynamic layouts with just a few lines of code.

In this article, we will explore the CSS property flex and its child properties, along with some common use cases and examples.

The Flex Propertylink

The flex property is shorthand for setting three other properties: flex-grow, flex-shrink, and flex-basis. It is used to specify how an element should grow or shrink to fit the available space within its container. The flex property takes three values:

flex: <flex-grow> <flex-shrink> <flex-basis>;
  • flex-grow: This property specifies how much an item should grow relative to the other items in the container. The default value is 0, which means the item will not grow.
  • flex-shrink: This property specifies how much an item should shrink relative to the other items in the container. The default value is 1, which means the item will shrink equally with other items in the container.
  • flex-basis: This property specifies the initial size of the item before any growing or shrinking occurs. The default value is auto, which means the item will be sized based on its content.

Here's an example:

.container {
  display: flex;
}

.item {
  flex: 1 1 auto;
}

In this example, we have a container with the display property set to flex. This turns the container into a flex container and allows us to use the flex properties on its child items.

We also have an item with the flex property set to 1 1 auto. This means the item will grow and shrink equally with other items in the container, and its initial size will be based on its content.

The Flex-Grow Propertylink

The flex-grow property is used to specify how much an item should grow relative to the other items in the container. It takes a value of 0 or higher, with higher values indicating that the item should grow more.

Here's an example:

.container {
  display: flex;
}

.item {
  flex-grow: 1;
}

In this example, we have a container with the display property set to flex, and an item with the flex-grow property set to 1. This means the item will grow equally with other items in the container, regardless of its initial size.

The Flex-Shrink Propertylink

The flex-shrink property is used to specify how much an item should shrink relative to the other items in the container. It takes a value of 0 or higher, with higher values indicating that the item should shrink more.

Here's an example:

.container {
  display: flex;
}

.item {
  flex-shrink: 2;
}

In this example, we have a container with the display property set to flex, and an item with the flex-shrink property set to 2. This means the item will shrink twice as much as other items in the container if there is not enough space to accommodate all items. The flex-basis property is used to specify the initial size of an item before any growing or shrinking occurs. It takes a value of auto or a length value, such as px, em, or rem.

The Flex-Basis Propertylink

The flex-basis property is used to specify the initial size of an item before any growing or shrinking occurs. It takes a value of auto or a length value, such as px, em, or rem.

Here's an example:

.container {
  display: flex;
}

.item {
  flex-basis: 200px;
}

In this example, we have a container with the display property set to flex, and an item with the flex-basis property set to 200px. This means the item will have an initial size of 200px, regardless of its content.

The Flex-Direction Propertylink

The flex-direction property is used to specify the direction in which items are laid out within a container. It takes four values: row, row-reverse, column, and column-reverse. The default value is row.

  • row: Items are laid out horizontally from left to right.
  • row-reverse: Items are laid out horizontally from right to left.
  • column: Items are laid out vertically from top to bottom.
  • column-reverse: Items are laid out vertically from bottom to top.

Here's an example:

.container {
  display: flex;
  flex-direction: row-reverse;
}

In this example, we have a container with the display property set to flex, and the flex-direction property set to row-reverse. This means the items within the container will be laid out horizontally from right to left.

The Justify-Content Propertylink

The justify-content property is used to align items along the main axis (the axis defined by the flex-direction property) within a container. It takes six values: flex-start, flex-end, center, space-between, space-around, and space-evenly. The default value is flex-start.

  • flex-start: Items are aligned to the start of the container.
  • flex-end: Items are aligned to the end of the container.
  • center: Items are centered within the container.
  • space-between: Items are evenly distributed along the main axis, with the first item aligned to the start of the container and the last item aligned to the end of the container.
  • space-around: Items are evenly distributed along the main axis, with equal space around them.
  • space-evenly: Items are evenly distributed along the main axis, with equal space between them.

Here's an example:

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

In this example, we have a container with the display property set to flex, and the justify-content property set to center. This means the items within the container will be centered along the main axis.

The Align-Items Propertylink

The align-items property is used to align items along the cross axis (the axis perpendicular to the main axis) within a container. It takes five values: flex-start, flex-end, center, baseline, and stretch. The default value is stretch.

  • flex-start: Items are aligned to the start of the cross axis.
  • flex-end: Items are aligned to the end of the cross axis.
  • center: Items are centered within the cross axis.
  • baseline: Items are aligned to their baselines.
  • stretch: Items are stretched to fill the container along the cross axis.

Here's an example:

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

In this example, we have a container with the display property set to flex, and the align-items property set to center. This means the items within the container will be centered along the cross axis.

Conclusionlink

CSS flexbox is a powerful layout module that allows developers to create flexible and responsive layouts with ease. The flex property is the cornerstone of flexbox, and it provides a powerful shorthand for setting the flex-grow, flex-shrink, and flex-basis properties. Additionally, the flex-direction, justify-content, and align-items properties allow developers to control the direction, alignment, and spacing of items within a container.

With its intuitive syntax and flexible nature, CSS flexbox is a great option for building modern, responsive layouts. By mastering the flex property and its child properties, developers can unlock the full potential of this powerful layout module and create beautiful, functional designs for the web.