Skip to content
article

Flexbox o Grid: cómo decido en 10 segundos (con el código que sí uso en la chamba)

una dimensión vs dos dimensiones está bien, pero hay una regla más útil

Sofía Ramírez@sofi_dev_mx

May 28, 2026 · 3 min read

Cada semana alguien en la chamba me pregunta "¿esto lo hago con flex o con grid?". La respuesta de libro es "flex para una dimensión, grid para dos". Está bien, pero a mí me sirve más esta otra:

Si el contenido manda el tamaño, flex. Si el layout manda el tamaño, grid.

O sea: con flex los elementos dicen "yo mido esto" y el contenedor se acomoda. Con grid el contenedor dice "aquí hay 3 columnas" y los elementos se acomodan. Van ejemplos reales.

1. Navbar: flex

.nav {
  display: flex;
  align-items: center;
  gap: 1rem;
}
.nav .logout {
  margin-left: auto; /* empuja este botón a la derecha */
}

Cada link mide lo que mide su texto. El contenido manda. Flex.

2. Grid de tarjetas responsive sin media queries: grid

.cards {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
  gap: 1.5rem;
}

Esto mete todas las columnas de mínimo 240px que quepan, y el espacio que sobra se reparte. En celular queda una columna, en desktop 4 o 5, sin escribir ni una media query.

auto-fill vs auto-fit, la duda de siempre: si solo tienes 2 tarjetas en una pantalla donde caben 5, auto-fill deja las 3 columnas vacías ahí (tus tarjetas se quedan angostitas) y auto-fit colapsa las vacías y tus 2 tarjetas se estiran a todo el ancho. Para catálogos uso auto-fill, para cosas tipo "3 features de la landing" uso auto-fit.

3. El layout de la app: grid con áreas

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

@media (max-width: 768px) {
  .layout {
    grid-template-columns: 1fr;
    grid-template-areas:
      "header"
      "main"
      "footer";
  }
  .sidebar { display: none; }
}

Lo bonito de grid-template-areas es que el CSS se lee como un dibujito del layout. Cuando entra alguien nuevo al equipo lo entiende en 5 segundos.

4. Centrar algo: grid, dos líneas

.centro {
  display: grid;
  place-items: center;
}

Sí, ya sé que con flex también se puede. Esto es más corto y ya.

5. El bug que te va a pasar con flex (a todos nos pasó)

Tienes una fila con un ícono y un texto larguísimo con text-overflow: ellipsis y... no se corta, se sale del contenedor. Es porque los hijos de flex tienen min-width: auto por defecto, o sea, no se encogen más que su contenido. La solución:

.fila { display: flex; gap: .5rem; }
.fila .texto {
  min-width: 0; /* ahora sí se puede encoger */
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

Esa línea de min-width: 0 me ha salvado más veces que el café de olla.

¿Dudas? Pregunten aquí, nadie se va a burlar. Para eso abrimos esta comunidad 💜

Written by

Sofía Ramírez

Frontend dev 💜 React, TypeScript y mucho café de olla. Trabajo remoto para una empresa gringa desde Guadalajara. Fundé codigo_en_espanol porque todo está en inglés y ya me cansé jaja

Get the best of #codigo_en_espanol weekly

One email each Monday with the most useful posts. No spam; unsubscribe in one click.

Comments

6

Sign in to join the conversation.

Sign in to comment
Caio Nascimento@caio_backend#10 in Código en Español
o do min-width: 0 me custou uma tarde inteira uma vez. sou backend e mesmo assim kkkk salvando
2 net votes
Sofía Ramírez@sofi_dev_mx#1 in Código en Español
a todos nos ha costado una tarde, es como un rito de iniciación jaja
2 net votes
Sam Whitaker@segfault_sam2 rep in Código en Español
dont speak spanish but i understood every code block. css is the true universal language. and like every language nobody speaks it correctly 💀
0 net votes
Rodel Bautista@rodel_java1 rep in Código en Español
Used translate for the text but code is code. grid-template-areas fixed my admin dashboard layout today. Salamat!
1 net votes
Martín Ferraro@tincho_go#2 in Código en Español
Llegué tarde pero che, lo de auto-fill vs auto-fit lo explicaste mejor que la doc de MDN. Yo soy de backend y uso flex para todo y después lloro. Gracias Sofi.
3 net votes
Sofía Ramírez@sofi_dev_mx#1 in Código en Español
jaja gracias! los de backend usando flex para todo es lo más normal del mundo, no te sientas mal
1 net votes