Desarrollo Web

Grid CSS explicado paso a paso (con ejemplos prácticos)

Jairo
6 min de lectura
Grid CSS explicado paso a paso (con ejemplos prácticos)
Si estás empezando con maquetación moderna en CSS, Grid es tu “superpoder” bidimensional: controla filas y columnas a la vez, define áreas como si fueran piezas de Lego y te ahorra media vida con minmax() y los auto-fit/fill. En mi experiencia, Grid y Flexbox solucionan problemas parecidos, pero mi elección depende del tipo de layout y del equipo.

1) Qué es CSS Grid y cuándo usarlo (vs Flexbox)

CSS Grid es un sistema de rejilla bidimensional: organizas el lienzo en filas y columnas, y colocas los elementos en celdas o áreas. Flexbox, en cambio, es unidimensional (fila o columna). ¿Cuándo uso cada uno?

  • Elijo Grid cuando el diseño se piensa “en plano”: header, sidebar, main, footer, tarjetas en cuadrícula, dashboards, galerías, etc. Cuando el cliente pide composiciones más rígidas, Grid me da control en dos dimensiones.
  • Elijo Flexbox en componentes con flujo lineal: barras de navegación, botones alineados, chips, tarjetas dentro de tarjetas… Para flujos lineales, tiro de Flexbox.

Tu comentario encaja perfecto aquí: aprender Grid “tiene complejidades similares a Flexbox”. Ambos hacen casi el mismo trabajo en ciertos escenarios; lo importante es saber estructurar bien la página para que sea navegable y estéticamente correcta según lo que quiere el cliente.

2) Conceptos clave: contenedor, ítems, celdas, líneas y áreas

  • Contenedor Grid: el elemento al que aplicas display: grid.
  • Ítems Grid: los hijos directos del contenedor.
  • Líneas: separadores imaginarios que forman las celdas.
  • Pistas (tracks): cada fila/columna definida.
  • Áreas: grupos de celdas nombradas que hacen tu vida más fácil.

Piensa en Grid como un papel milimetrado donde decides cuántas columnas/filas tienes y dónde cae cada pieza.

3) Tu primera cuadrícula (30 segundos)

<section class="grid-ejemplo">
  <header>Header</header>
  <nav>Sidebar</nav>
  <main>Main</main>
  <footer>Footer</footer>
</section>

<style>
.grid-ejemplo{
  display: grid;
  grid-template-columns: 200px 1fr; /* sidebar + contenido */
  grid-template-rows: auto 1fr auto; /* header, contenido fluido, footer */
  gap: 1rem;
}
header { background:#E6F4FF; }
nav    { background:#FCE8E6; }
main   { background:#E8F5E9; }
footer { background:#FFF3E0; }
</style>

Esto ya crea una cuadrícula con 2 columnas y 3 filas. Más abajo la mejoramos con áreas.

4) Unidad fr, gap y cuadrícula implícita vs explícita

  • fr reparte espacio restante. 1fr 1fr 1fr → tres columnas iguales del ancho disponible.
  • gap crea separación sin hacks de margin.
  • Explícita: la que defines con grid-template-rows/columns.
  • Implícita: la que CSS “inventa” cuando metes más ítems de los que caben en la explícita; se controla con grid-auto-rows/columns y grid-auto-flow.

Ejemplo rápido de reparto con fr:

.grid-3-col {
  display:grid;
  grid-template-columns: 2fr 1fr 1fr; /* primera el doble */
  gap: 12px;
}

5) Potenciadores: repeat(), minmax(), auto-fit y auto-fill

Aquí está el “combo ganador” para responsive sin romperte la cabeza. En mi caso, practicar minmax() y auto-fit fue lo que marcó la diferencia.

.cards {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 16px;
}

  • repeat(n, …): menos escritura, más claridad.
  • minmax(min, max): asegura un mínimo (para que no se encoja demasiado) y reparte el resto hasta max.
  • auto-fit: “empuja” a que las columnas se pleguen/vacien para llenar el espacio disponible (colapsa tracks vacíos).
  • auto-fill: reserva el espacio como si siguiera habiendo tracks (útil para ciertos layouts fluidos).

Tu experiencia lo resume: con Grid “podemos hacer responsivo” y “alinear las cajas que queremos” como necesitamos.

6) grid-template-areas: maquetar como si fuera un wireframe

Nombras zonas y colocas ítems por nombre. Conversar con diseño/negocio se vuelve trivial: “header”, “main”, “sidebar”, “footer”.

.layout {
  display:grid;
  grid-template-columns: 240px 1fr;
  grid-template-rows: auto 1fr auto;
  gap: 16px;
  grid-template-areas:
    "header header"
    "sidebar main"
    "footer footer";
}
header { grid-area: header; }
nav    { grid-area: sidebar; }
main   { grid-area: main; }
footer { grid-area: footer; }

En mi día a día, con grid-template-areas “puedo hablar en plano con diseño”: todos vemos el mismo wireframe.

7) Alineación en dos dimensiones: place-*, align-*, justify-*

Grid te permite alinear contenido del contenedor y de cada ítem:

  • Contenedor: align-content (vertical), justify-content (horizontal), place-content (atajo).
  • Ítems: align-items/justify-items para todos, y align-self/justify-self por ítem.
  • Atajos: place-items:center centra todo, place-self:end manda un ítem a la esquina según el contexto.
.galeria {
  display:grid;
  grid-template-columns: repeat(3, 1fr);
  place-items: center;   /* centra cada ítem en su celda */
  gap: 8px;
}
.destacado {
  place-self: end;       /* esquina inferior derecha de su celda */
}

Esto conecta con tu punto: “podemos alinear… a la izquierda, derecha, centrar, abajo, esquina inferior izquierda… como queramos”.

8) Patrones responsive sin media queries (cards, galería, dashboard)

a) Tarjetas fluidas

.cards { 
  display:grid; 
  grid-template-columns: repeat(auto-fit, minmax(18rem, 1fr));
  gap: 1rem;
}

b) Galería “tipo masonry simple” (sin JS, alturas variables)

.masonry {
  display:grid;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  grid-auto-rows: 8px;
  gap: 8px;
}
.masonry > article { 
  grid-row: span var(--h, 30); /* cada tarjeta decide su altura en múltiplos de 8px */
}

c) Mini-dashboard con áreas

.dashboard{
  display:grid;
  grid-template-columns: 1.2fr 2fr;
  grid-template-rows: auto auto 1fr;
  gap: 12px;
  grid-template-areas:
    "kpiA kpiB"
    "kpiC chart"
    "table chart";
}
.kpiA{grid-area:kpiA;} .kpiB{grid-area:kpiB;}
.kpiC{grid-area:kpiC;} .chart{grid-area:chart;}
.table{grid-area:table;}

Cuando el cliente pide “que se vea exactamente así”, Grid me ha dado el control milimétrico sin depender de media queries en muchos casos.

9) Grid vs Flexbox en la vida real: decisiones rápidas

  • Listas horizontales/verticales, botones, navbars → Flexbox.
  • Layouts de página, rejillas de tarjetas, hero con sidebar, dashboards → Grid.
  • Componentes mixtos: Grid “afuera”, Flexbox “adentro” para alinear contenido interno.
En mi experiencia, “mi elección depende del tipo de layout y del equipo”: si diseño piensa en columnas/áreas, Grid; si se habla de “orden de elementos en fila”, Flex.

10) Errores comunes y cómo depurarlos

  • Ítems fuera de la rejilla: revisa si exceden el número de columnas/filas. Usa el panel de Layout del devtools (Chrome/Firefox) para dibujar la cuadrícula.
  • Confundir gap con margin: gap solo separa dentro de la malla; no empuja fuera del contenedor.
  • Implícita descontrolada: si te aparecen filas “fantasma”, define grid-auto-rows para alturas consistentes.
  • auto-fit vs auto-fill: si “sobran huecos”, quizá querías auto-fit para que colapsen.
  • Alineación que no responde: recuerda que place-items actúa dentro de cada celda, y place-content distribuye la malla en el contenedor.

11) Conclusión y próximos pasos

CSS Grid te da estructura sólida, limpia y conversable con el equipo. En mi caso, “aprender Grid me costó lo mismo que Flexbox”, pero la combinación de grid-template-areas, minmax() y auto-fit me permitió organizar mejor la página para que sea navegable y que se vea como quiere el cliente. Próximos pasos: practica con tu layout real, abre el devtools para ver líneas/áreas, y prueba el patrón repeat(auto-fit, minmax(...)) hasta que te salga sin pensar.


CSS

Jairo

Comentarios (0)

No hay comentarios aún. ¡Sé el primero en comentar!

Envíame un comentario

🍪 Utilizamos cookies para mejorar tu experiencia de navegación, analizar el tráfico del sitio y personalizar el contenido. Al continuar navegando, aceptas nuestro uso de cookies. Más información