DEV Community

Pranav Bakare
Pranav Bakare

Posted on

Grid vs Flexbox

Grid and Flexbox are both powerful layout systems in CSS, each designed for different types of layout tasks. Here's a comparison of the two, along with examples to illustrate their differences:

Flexbox

Purpose:
Flexbox is designed for one-dimensional layouts. It handles alignment and spacing of items along a single axis (either row or column).

Key Features:

  • Align items horizontally or vertically.
  • Distribute space within a container.
  • Control item order and size flexibly.

Example:

<!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>
        .container {
            display: flex;
            justify-content: space-between; /* Distributes space between items */
            align-items: center; /* Aligns items vertically in the center */
            height: 100vh;
            background-color: lightgrey;
        }
        .item {
            background-color: dodgerblue;
            color: white;
            padding: 20px;
            text-align: center;
            flex: 1; /* Makes items flexible */
            margin: 10px;
        }
    </style>
</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>
Enter fullscreen mode Exit fullscreen mode

Features Illustrated:

  • Items are aligned in a row with space distributed between them.
  • Items are centered vertically in the container.
  • Items grow and shrink based on available space.

Grid

Purpose:
Grid is designed for two-dimensional layouts. It handles both rows and columns simultaneously, allowing for complex layouts.

Key Features:

  • Create both rows and columns.
  • Control item placement in a grid.
  • Span items across multiple rows and columns.

Example:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Grid Example</title>
    <style>
        .container {
            display: grid;
            grid-template-columns: repeat(3, 1fr); /* Creates three equal-width columns */
            grid-gap: 10px; /* Adds space between grid items */
            height: 100vh;
            background-color: lightgrey;
        }
        .item {
            background-color: dodgerblue;
            color: white;
            padding: 20px;
            text-align: center;
        }
        .item:nth-child(2) {
            grid-column: span 2; /* Makes the second item span two columns */
        }
    </style>
</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>
Enter fullscreen mode Exit fullscreen mode

Features Illustrated:

  • Creates a grid with three equal columns.
  • Items are placed into the grid with gaps between them.
  • The second item spans across two columns.

Summary

  • Flexbox: Best for one-dimensional layouts (either row or column). Great for aligning items, distributing space, and handling simple layouts.
  • Grid: Best for two-dimensional layouts (rows and columns). Ideal for more complex designs requiring precise placement and control over both dimensions.

Choosing between Flexbox and Grid depends on the complexity of your layout and whether you need one-dimensional or two-dimensional control. Often, both can be used together to achieve the desired layout.

Top comments (0)