CSS Flexbox

What is CSS Flexbox?

CSS Flexbox, or Flexible Box Layout, is a layout module in CSS designed to create flexible and responsive web layouts. Introduced in CSS3, Flexbox provides a more intuitive way to build web pages by simplifying the process of creating complex layouts without relying on floats and positioning. Its dynamic nature allows elements within a container to adjust their sizes based on the available space, making it ideal for responsive designs and reducing the need for media queries.

Why Use CSS Flexbox?

Flexbox offers several advantages over traditional layout modes:

  • Flexibility in Layouts: Easily specify how elements should be laid out, enabling dynamic resizing and repositioning based on screen size.
  • Simplified Development: No need for floats or complex positioning; alignment, distribution, and order can be managed with just a few lines of code.
  • Responsive Design: Flexbox allows for fluid resizing and self-adjusting elements, eliminating the need for multiple stylesheets or extensive media queries.

Benefits of Using CSS Flexbox

CSS Flexbox provides the following benefits:

  • Simplifies the Design Process: It creates a responsive layout structure without using float or positioning.
  • Dynamic and Flexible Layouts: Flexbox adapts to different screen sizes and devices with built-in features to adjust element sizes and spacing.
  • Improved Alignment and Positioning: Easily center elements, align along specific axes, or create complex layouts that are otherwise difficult to achieve.

Basic Concepts of CSS Flexbox

Parent Element and Child Elements

A flex container is a parent element defined using the display property set to flex or inline-flex. This enables the flexbox properties for its child elements, known as flex items. Once defined, the flex container controls the layout of its flex items using properties like flex-direction, flex-wrap, justify-content, and align-items.

Flex Container and Flex Items

A flex container lays out its flex items according to flexbox rules. The main axis determines the primary layout direction (horizontal or vertical), while the cross axis runs perpendicular to the main axis. Flex items automatically stretch along the cross axis, ensuring they fill the available space within the container.

Main Axis and Cross Axis

  • The main axis is the primary direction determined by the flex-direction property. A row direction means the main axis is horizontal, while a column direction makes it vertical.
  • The cross axis runs perpendicular to the main axis. For a row, it runs vertically, and for a column, it runs horizontally. Alignment along these axes is managed using properties like justify-content (main axis) and align-items (cross axis).

Flex Lines

Flex lines are created when flex items wrap into multiple rows or columns. This behavior is controlled by the flex-wrap property:

  • nowrap keeps all items in a single line.
  • wrap allows items to move to new lines when necessary.
  • wrap-reverse wraps items in reverse order.

Properties of the Parent Element

Display Property

The display property controls how an element is displayed. By setting it to flex or inline-flex, all direct child elements become flex items, allowing easy control over their positioning and sizing.

Flex Direction Property

The flex-direction property specifies the direction of the flex items:

  • row (default): Items are arranged horizontally from left to right.
  • row-reverse: Items are arranged from right to left.
  • column: Items are arranged vertically from top to bottom.
  • column-reverse: Items are arranged from bottom to top.

Justify Content Property

The justify-content property controls the distribution of space along the main axis:

  1. flex-start: Aligns items at the start of the container (default).
  2. flex-end: Aligns items at the end of the container.
  3. center: Centers items within the container.
  4. space-between: Distributes items evenly, with the first and last items at the container edges.
  5. space-around: Distributes items evenly with equal space around each item.

Align Items Property

The align-items property controls the alignment of flex items along the cross axis:

  • flex-start: Aligns items at the start (top for column, left for row).
  • flex-end: Aligns items at the end (bottom for column, right for row).
  • center: Centers items within the container.
  • stretch: Stretches items to fill the container.
  • baseline: Aligns items along their baselines.

Align Content Property

The align-content property controls the alignment of multiple flex lines along the cross axis:

  • flex-start: Lines are aligned at the start of the container.
  • flex-end: Lines are aligned at the end.
  • center: Lines are centered within the container.
  • space-between: Lines are evenly distributed, with the first and last at the container edges.
  • space-around: Lines are evenly spaced, with equal space around each line.
  • stretch: Lines stretch to fill the container height.

Flex Wrap Property

The flex-wrap property controls how items wrap within the flex container:

  • nowrap: Items stay in a single line, potentially overflowing the container.
  • wrap: Items wrap onto multiple lines from left to right.
  • wrap-reverse: Items wrap onto multiple lines from right to left.

By adjusting flex-wrap, developers can better control how items are arranged within a flex container.

Create a free account to access the full topic

“It has all the necessary theory, lots of practice, and projects of different levels. I haven't skipped any of the 3000+ coding exercises.”
Andrei Maftei
Hyperskill Graduate