Comparación de Flexbox, Grid y Column Layouts

Comparación de Flexbox, Grid y Column Layouts

Este artículo explica la comparación entre Flexbox, Grid y Column Layouts.

Aprenderás las diferencias entre Flexbox, Grid y Column Layouts, y cuándo usar cada uno.

YouTube Video

HTML para vista previa

css-layout-comparision.html
 1<!DOCTYPE html>
 2<html lang="en">
 3<head>
 4  <meta charset="UTF-8">
 5  <meta name="viewport" content="width=device-width, initial-scale=1.0">
 6  <title>CSS Properties Example</title>
 7  <link rel="stylesheet" href="css-base.css">
 8  <link rel="stylesheet" href="css-layout-comparision.css">
 9</head>
10<body>
11  <!-- Header -->
12  <header>
13      <h1>CSS Properties For Layout</h1>
14  </header>
15  <!-- Main content -->
16  <main>
17    <header>
18        <h2>Layout Comparision</h2>
19    </header>
20    <article>
21      <h3>flex</h3>
22      <section>
23        <section class="sample-view">
24          <div class="flex-container">
25            <div class="flex-item">Item 1</div>
26            <div class="flex-item">Item 2</div>
27            <div class="flex-item">Item 3</div>
28            <div class="flex-item">Item 4</div>
29            <div class="flex-item">Item 5</div>
30            <div class="flex-item">Item 6</div>
31            <div class="flex-item">Item 7</div>
32            <div class="flex-item">Item 8</div>
33            <div class="flex-item">Item 9</div>
34          </div>
35        </section>
36      </section>
37    </article>
38    <article>
39      <h3>grid</h3>
40      <section>
41        <section class="sample-view">
42          <div class="grid-box">
43            <div class="grid-item item1">Item 1</div>
44            <div class="grid-item item2">Item 2</div>
45            <div class="grid-item item3">Item 3</div>
46            <div class="grid-item item4">Item 4</div>
47            <div class="grid-item item5">Item 5</div>
48            <div class="grid-item item6">Item 6</div>
49            <div class="grid-item item7">Item 7</div>
50            <div class="grid-item item8">Item 8</div>
51            <div class="grid-item item9">Item 9</div>
52          </div>
53        </section>
54      </section>
55    </article>
56    <article>
57      <h3>column</h3>
58      <section>
59        <section class="sample-view">
60          <section class="columns-container">
61            <p class="columns-item">Item 1</p>
62            <p class="columns-item">Item 2</p>
63            <p class="columns-item">Item 3</p>
64            <p class="columns-item">Item 4</p>
65            <p class="columns-item">Item 5</p>
66            <p class="columns-item">Item 6</p>
67            <p class="columns-item">Item 7</p>
68            <p class="columns-item">Item 8</p>
69            <p class="columns-item">Item 9</p>
70          </section>
71        </section>
72      </section>
73    </article>
74  </main>
75</body>
76</html>

Comparación de Flexbox, Grid y Column Layouts

CSS flex, grid y columns son todas técnicas para alinear y organizar elementos, pero cada una tiene sus propias fortalezas y casos de uso ideales. A continuación, se presenta una explicación clara de sus diferencias mediante una comparación.

Flexbox(display: flex

 1.flex-container {
 2    display: flex;
 3    justify-content: space-between;
 4    align-items: center;
 5    flex-wrap: wrap;
 6    background-color: lightblue;
 7    height: 200px;
 8}
 9
10.flex-item {
11    background-color: lightskyblue;
12    padding: 10px;
13    margin: 5px;
14    width: 70px;
15    height: auto;
16}

Características

  • Adecuado para diseños unidireccionales, ya sea horizontal o vertical.
  • Permite un control flexible sobre el orden y la flexibilidad de los elementos.
  • Más adecuado para diseños de pequeña escala como barras de navegación y grupos de botones.

Ventajas

  • Ajusta automáticamente el tamaño de los elementos secundarios.
  • Puedes cambiar el orden de los elementos usando propiedades como flex-direction, flex-wrap y order.

Ejemplo de cómo cambiar el orden de visualización

Como ejemplo de cambio en el orden de visualización, establezcamos la propiedad flex-direction a column.

1.flex-container {
2    flex-direction: column;
3}

Cuando flex-direction se establece en column, los elementos cambian de un diseño horizontal a uno vertical. El diseño cambia de izquierda a derecha a arriba hacia abajo.

Grid(display: grid

 1.grid-box {
 2    display: grid;
 3    grid-template-columns: 100px 100px 100px;
 4    grid-template-rows: 50px 50px 50px;
 5    gap: 20px;
 6    background-color: lightblue;
 7    border: none;
 8    height: 200px;
 9}
10
11.grid-item {
12    background-color: lightskyblue;
13    width: 100%;
14    padding: 0;
15    text-align: center;
16}

Características

  • Ideal para diseños bidimensionales.
  • Permite una definición clara de diseños basados en cuadrículas.
  • Ideal para diseños más complejos y estructuración general de la página.

Ventajas

  • Se pueden definir filas y columnas simultáneamente.
  • Las secciones se pueden colocar utilizando áreas nombradas (grid-area).
  • Los elementos secundarios se pueden colocar libremente dentro de la cuadrícula, permitiendo un control flexible del orden.

Ejemplo de cómo cambiar el orden de visualización

Como ejemplo de cambio de orden en la visualización, usemos la propiedad grid-template-areas para establecer las posiciones de visualización.

 1.grid-box {
 2    grid-template-areas:
 3        "item1 item4 item5"
 4        "item2 item6 item7"
 5        "item3 item8 item9";
 6}
 7
 8.item1 { grid-area: item1; }
 9.item2 { grid-area: item2; }
10.item3 { grid-area: item3; }
11.item4 { grid-area: item4; }
12.item5 { grid-area: item5; }
13.item6 { grid-area: item6; }
14.item7 { grid-area: item7; }
15.item8 { grid-area: item8; }
16.item9 { grid-area: item9; }

Como puedes ver, grid se puede usar no solo para cambiar el orden de visualización, sino también para crear diseños únicos.

Columns(column-count, column-width

 1.columns-container {
 2    background-color: lightblue;
 3    columns: 100px 3;
 4    column-gap: 20px;
 5    column-rule: 2px solid #333;
 6    padding: 10px;
 7}
 8
 9.columns-item {
10    background-color: lightskyblue;
11    text-align: center;
12    margin: 20px auto;
13    color: white;
14    display: flex;
15    align-items: center;
16    justify-content: center;
17    font-size: 1.2rem;
18    border: 1px solid #ccc;
19    height: 50px;
20}

Características

  • Puedes crear fácilmente columnas estilo revista.
  • Ideal para contenido de texto fluido.
  • Sigue el orden de origen de HTML, lo que lo hace menos adecuado para controlar el orden de los elementos.

Ventajas

  • Puede dividir texto largo automáticamente.
  • Puedes crear muy fácilmente diseños estilo periódico.

Tabla de Comparación

Característica / Caso de Uso Flexbox Grid Columnas
Dimensión del Diseño 1D (horizontal o vertical) 2D (horizontal y vertical) 1D (vertical)
Ideal Para Alineación de componentes Estructura de página completa Texto de múltiples columnas
Flexibilidad del Diseño Alta (orden y tamaño) Muy alta (definición de áreas) Baja (solo división automática)
Control de Hijos Flexible Claramente definido Difícil de controlar
Intención del Diseño Basado en el contenido Basado en el diseño Basado en el texto

Resumen

  • Flexbox es ideal cuando quieres alinear elementos en una fila, como encabezados o listas de tarjetas.
  • Grid es adecuado cuando quieres diseñar el diseño completo, como la estructura de una página web.
  • Columnas son mejores cuando quieres formatear texto en varias columnas, como en artículos o blogs.

También puedes combinarlos según sea necesario. Por ejemplo, puedes diseñar el diseño general con Grid y alinear los elementos internos con Flex.

Puedes seguir el artículo anterior utilizando Visual Studio Code en nuestro canal de YouTube. Por favor, también revisa nuestro canal de YouTube.

YouTube Video