What is CSS Flexbox?

CSS Flexible Box Layout, commonly known as Flexbox, is a layout model designed for creating dynamic and responsive layouts in web design. It provides a set of properties for distributing space and aligning items within a container, allowing for more efficient and flexible layouts compared to traditional CSS positioning methods.


Flexbox Concepts:
 
  • Flex Container: Any container with its display property set to flex or inline-flex becomes a flex container. It serves as the parent element for the flex items.
  • Flex Items: The child elements inside a flex container are called flex items. These items can be aligned, reordered, and resized within the flex container using Flexbox properties.
  • Main Axis and Cross Axis: Flexbox introduces two axes: the main axis and the cross axis. The main axis is determined by the flex-direction property, while the cross axis is perpendicular to the main axis.
  • Flex Direction: The flex-direction property defines the direction of the main axis. It can be set to row (default), row-reverse, column, or column-reverse.
  • Justify Content: The justify-content property aligns flex items along the main axis. It controls the distribution of space between and around items.
  • Align Items: The align-items property aligns flex items along the cross axis within the flex container.
  • Flex Wrap: By default, flex items try to fit into a single line. The flex-wrap property allows items to wrap onto multiple lines based on available space.
  • Flex Grow, Shrink, and Basis: Flex items can have flexible sizing behavior controlled by the flex-grow, flex-shrink, and flex-basis properties.


Flexbox Properties:
 
  • display: flex; - Specifies that the container is a flex container.
  • flex-direction: - Defines the direction of the main axis (row, row-reverse, column, column-reverse).
  • flex-wrap: - Controls wrapping behavior (nowrap, wrap, wrap-reverse).
  • justify-content: - Aligns items along the main axis (flex-start, flex-end, center, space-between, space-around).
  • align-items: - Aligns items along the cross axis (flex-start, flex-end, center, baseline, stretch).
  • align-self: - Allows an individual item to override its container's align-items value.
  • align-content: - Aligns lines of items along the cross axis when wrapping occurs (flex-start, flex-end, center, space-between, space-around, stretch).
  • flex: - Shorthand for flex-grow, flex-shrink, and flex-basis.
  • order: - Specifies the order of a flex item within its container.
  • flex-grow: - Determines the flexibility of a flex item to grow relative to other items.
  • flex-shrink: - Determines the flexibility of a flex item to shrink relative to other items.
  • flex-basis: - Specifies the initial size of a flex item before the remaining space is distributed.
  • align-content: - Aligns flex lines within the flex container when wrapping occurs.

Example:
 


Let's create a simple example to demonstrate the power of Flexbox in building responsive layouts. Consider a navigation bar with menu items that should adjust dynamically based on the screen size.


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Flexbox Example</title>
<style>
  .navbar {
    display: flex;
    justify-content: space-between;
    background-color: #333;
    color: white;
    padding: 10px;
  }

  .menu {
    display: flex;
    gap: 10px;
  }

  .menu-item {
    padding: 5px 10px;
    border-radius: 5px;
    background-color: #555;
    cursor: pointer;
  }

  /* Media query for responsiveness */
  @media (max-width: 768px) {
    .navbar {
      flex-direction: column;
    }
  }
</style>
</head>
<body>
  <nav class="navbar">
    <div class="logo">Logo</div>
    <div class="menu">
      <div class="menu-item">Home</div>
      <div class="menu-item">About</div>
      <div class="menu-item">Services</div>
      <div class="menu-item">Contact</div>
    </div>
  </nav>
</body>
</html>
 





In this example:
 
  • The .navbar class uses Flexbox with justify-content: space-between to evenly space the logo and menu items.
  • The .menu class makes the menu items flex items with a gap between them.
  • A media query is used to change the layout to a column when the screen width is less than or equal to 768px, improving responsiveness.
  • Benefits of Flexbox:
  • Flexible Layouts: Flexbox allows for flexible and dynamic layouts that adapt to different screen sizes and content lengths.
  • Easy Alignment: Aligning items horizontally or vertically within a container is simplified with Flexbox properties like justify-content and align-items.
  • Order Control: Flexbox provides the order property to reorder flex items without changing the HTML structure.
  • Responsive Design: Flexbox is a key tool for creating responsive designs, making it easier to build layouts that look great on various devices.
  • Efficient Space Distribution: Properties like flex-grow and flex-shrink enable efficient distribution of available space among flex items.



Practice Excercise Practice now