Saltar al contenido principal
Principiante TutorialCódigo

Cheat Sheet Visual de CSS Grid y Flexbox — La Guía que Siempre Busco

Referencia visual rápida de CSS Grid y Flexbox con ejemplos de código copiables. Todas las propiedades que necesitas para layouts modernos, en un solo sitio.

Fran Cobos 8 min de lectura 1525 palabras

Tabla de contenidos

Cada vez que necesito hacer un layout con Grid o Flexbox, acabo buscando en Google lo mismo: “css grid center item”, “flexbox space between”, “grid auto-fill vs auto-fit”…

Así que me hice esta referencia visual para dejar de buscar las mismas cosas una y otra vez. La comparto porque seguro que tú también lo buscas.

Flexbox — Referencia completa

El contenedor (parent)

.flex-container {
  display: flex;

  /* Dirección del eje principal */
  flex-direction: row;            /* → (default) */
  flex-direction: row-reverse;    /* ← */
  flex-direction: column;         /* ↓ */
  flex-direction: column-reverse; /* ↑ */

  /* ¿Se ajustan a varias líneas? */
  flex-wrap: nowrap;   /* Todo en una línea (default) */
  flex-wrap: wrap;     /* Saltan de línea si no caben */

  /* Alineación en el eje principal (horizontal si row) */
  justify-content: flex-start;    /* |■ ■ ■         | */
  justify-content: flex-end;      /* |         ■ ■ ■| */
  justify-content: center;        /* |    ■ ■ ■     | */
  justify-content: space-between; /* |■    ■    ■   | */
  justify-content: space-around;  /* | ■   ■   ■  | */
  justify-content: space-evenly;  /* |  ■  ■  ■  | */

  /* Alineación en el eje cruzado (vertical si row) */
  align-items: stretch;    /* Los items se estiran (default) */
  align-items: flex-start; /* Arriba */
  align-items: flex-end;   /* Abajo */
  align-items: center;     /* Centro vertical */
  align-items: baseline;   /* Alinea por la línea base del texto */

  /* Espacio entre elementos (moderno, funciona en Flex y Grid) */
  gap: 1rem;
  row-gap: 1rem;
  column-gap: 2rem;
}

Los items (children)

.flex-item {
  /* Cuánto crece el item si hay espacio extra */
  flex-grow: 0;   /* No crece (default) */
  flex-grow: 1;   /* Ocupa todo el espacio disponible */

  /* Cuánto se encoge si no hay espacio */
  flex-shrink: 1; /* Se encoge proporcionalmente (default) */
  flex-shrink: 0; /* NO se encoge — mantiene su tamaño */

  /* Tamaño base antes de crecer/encoger */
  flex-basis: auto;  /* Usa el width del elemento (default) */
  flex-basis: 200px; /* Empieza en 200px */
  flex-basis: 0;     /* Ignora el contenido, distribuye solo por grow */

  /* Shorthand (el que siempre uso) */
  flex: 1;           /* flex-grow: 1, flex-shrink: 1, flex-basis: 0 */
  flex: 0 0 200px;   /* No crece, no encoge, 200px fijo */

  /* Alineación individual (override del align-items del padre) */
  align-self: center;
  align-self: flex-start;
  align-self: flex-end;
  align-self: stretch;

  /* Orden visual */
  order: 0;  /* Default */
  order: -1; /* Se mueve al principio */
  order: 1;  /* Se mueve al final */
}

Los 5 patrones Flexbox que más uso

1. Centrar algo (el clásico)

.center-everything {
  display: flex;
  justify-content: center;
  align-items: center;
}
/* Tailwind: flex items-center justify-center */

Me pasé 3 años usando margin: 0 auto + line-height hacks. Ojalá alguien me hubiera dicho esto antes.

.navbar {
  display: flex;
  justify-content: space-between;
  align-items: center;
}
/* Tailwind: flex items-center justify-between */

3. Cards en fila que saltan de línea

.card-grid {
  display: flex;
  flex-wrap: wrap;
  gap: 1rem;
}
.card {
  flex: 1 1 300px; /* Mínimo 300px, crece para rellenar */
}
/* Tailwind: flex flex-wrap gap-4; child: flex-1 basis-[300px] */

4. Sidebar fija + contenido flexible

.layout {
  display: flex;
}
.sidebar {
  flex: 0 0 280px; /* Fija a 280px */
}
.content {
  flex: 1; /* Ocupa el resto */
}
/* Tailwind: flex; sidebar: w-[280px] shrink-0; content: flex-1 */
body {
  display: flex;
  flex-direction: column;
  min-height: 100vh;
}
main {
  flex: 1; /* Empuja el footer abajo */
}
/* Tailwind: flex flex-col min-h-screen; main: flex-1 */

CSS Grid — Referencia completa

El contenedor (parent)

.grid-container {
  display: grid;

  /* Definir columnas */
  grid-template-columns: 200px 1fr 200px;      /* Sidebar | Content | Sidebar */
  grid-template-columns: repeat(3, 1fr);        /* 3 columnas iguales */
  grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); /* Responsive sin media queries */
  grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));  /* Idem, pero estira si sobra espacio */

  /* Definir filas */
  grid-template-rows: auto 1fr auto;            /* Header | Content | Footer */
  grid-auto-rows: minmax(100px, auto);          /* Filas implícitas: mínimo 100px */

  /* Espacio entre celdas */
  gap: 1rem;
  row-gap: 1.5rem;
  column-gap: 1rem;

  /* Alinear TODO el contenido del grid */
  justify-items: stretch;  /* Los items se estiran horizontalmente (default) */
  justify-items: center;   /* Centrado horizontal */
  align-items: stretch;    /* Los items se estiran verticalmente (default) */
  align-items: center;     /* Centrado vertical */

  /* Alinear el grid dentro de su contenedor */
  justify-content: center;        /* Grid centrado horizontalmente */
  align-content: center;          /* Grid centrado verticalmente */
  place-content: center;          /* Shorthand: ambos a la vez */
}

Los items (children)

.grid-item {
  /* Posicionamiento por línea (empieza en 1, no en 0) */
  grid-column: 1 / 3;      /* Ocupa de la línea 1 a la 3 (2 columnas) */
  grid-column: 1 / -1;     /* De la primera a la última línea (full width) */
  grid-column: span 2;     /* Ocupa 2 columnas desde donde esté */
  grid-row: 1 / 3;         /* Ocupa 2 filas */

  /* Alineación individual */
  justify-self: center;    /* Centrado horizontal en su celda */
  align-self: center;      /* Centrado vertical en su celda */
  place-self: center;      /* Shorthand: ambos */
}

Los 5 patrones Grid que más uso

1. Grid responsive sin media queries

.responsive-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 1.5rem;
}
/* Tailwind: grid grid-cols-[repeat(auto-fit,minmax(280px,1fr))] gap-6 */
/* O más simple: grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6 */

Este es el patrón que uso para el 90% de grids. auto-fit + minmax() = las columnas se ajustan solas. Si caben 3, hay 3. Si solo caben 2, hay 2. Sin una sola media query.

auto-fill vs auto-fit: auto-fill crea columnas vacías si sobra espacio. auto-fit estira las existentes. Para cards, siempre auto-fit.

2. Layout de página completa (Holy Grail)

.page-layout {
  display: grid;
  grid-template-columns: 250px 1fr;
  grid-template-rows: auto 1fr auto;
  grid-template-areas:
    "header header"
    "sidebar main"
    "footer footer";
  min-height: 100vh;
}
.header  { grid-area: header; }
.sidebar { grid-area: sidebar; }
.main    { grid-area: main; }
.footer  { grid-area: footer; }

grid-template-areas es pura magia. Puedes leer el layout como si fuera un dibujo ASCII.

3. Galería tipo Pinterest (Masonry)

.masonry {
  columns: 3;
  column-gap: 1rem;
}
.masonry-item {
  break-inside: avoid;
  margin-bottom: 1rem;
}
/* Nota: esto es CSS Columns, no Grid. Pero lo incluyo porque
   siempre lo busco como "css grid masonry". Grid masonry real
   con grid-template-rows: masonry ya funciona en Firefox. */

4. Item que ocupa todo el ancho

.full-width-item {
  grid-column: 1 / -1; /* De la primera a la última línea */
}
/* Tailwind: col-span-full */

5. Centrar un item en el grid

.centered-grid {
  display: grid;
  place-items: center;
  min-height: 100vh;
}
/* Tailwind: grid place-items-center min-h-screen */

Sí, place-items: center en Grid es otra forma de centrar. Más limpio que Flex para centrar un solo elemento.


Cuándo uso cada uno — Mi regla personal

SituaciónElijoPor qué
NavbarFlexboxUna sola fila, space-between
Grid de cardsGridNecesito columnas responsive
FormularioGrid2 columnas de inputs alineados
Centrar un divGridplace-items: center es una línea
Sidebar + contentGrid2 columnas con anchos distintos
Botones en filaFlexboxUna fila con gap
Dashboard completoGridFilas Y columnas con areas
Lista verticalFlexboxflex-direction: column con gap

La regla que me sirve: si solo necesito una dirección → Flexbox. Si necesito filas Y columnas → Grid. Cuando dudo, empiezo con Grid porque es más potente y después simplifico a Flexbox si resulta que no necesitaba tanto.


Propiedades nuevas de CSS que uso (2025-2026)

Container Queries

.card-container {
  container-type: inline-size;
}

@container (min-width: 400px) {
  .card {
    flex-direction: row; /* Horizontal si el contenedor es ancho */
  }
}
/* Tailwind: @container, @md:flex-row */

Los container queries responden al tamaño del contenedor padre, no del viewport. Perfectos para componentes reutilizables.

Subgrid

.parent {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
}
.child {
  grid-column: span 3;
  display: grid;
  grid-template-columns: subgrid; /* Hereda las columnas del padre */
}

subgrid permite que un hijo herede las líneas del grid del padre. Ideal para alinear contenido dentro de cards en un grid.


Tip final

Cuando me pierdo con un layout, abro las DevTools del navegador (F12), selecciono el elemento, y activo el Grid/Flex overlay (en Chrome: Layout panel → Grid overlays). Te dibuja las líneas, las areas, y los gaps en pantalla. Es la mejor forma de debuggear layouts.

Artículos relacionados

Fran Cobos

Fran Cobos

Desarrollador Full Stack especializado en IA aplicada, automatización y desarrollo web. Escribo sobre herramientas, tutoriales y casos reales para programadores.

¿Necesitas desarrollo a medida?

Apps web, IA, módulos ERP — cuéntame tu proyecto.