Uso avanzado de CSS Grid para diseño responsivo

Clase 21 de 28Curso Profesional de CSS Grid Layout

Contenido del curso

Resumen

Controlar el tamaño de los elementos en una grilla es uno de los retos más frecuentes en el desarrollo frontend. CSS Grid ofrece funciones específicas que permiten definir comportamientos flexibles sin recurrir a soluciones complicadas, logrando que el contenido se adapte a distintos tamaños de pantalla de forma elegante y predecible.

¿Qué es la unidad fr y cómo divide el espacio disponible?

Cuando definimos columnas con grid-template-columns, podemos usar la unidad fr (fraction) para repartir el ancho total del contenedor en partes iguales [0:18]. Imagina que el ancho de la pantalla es una torta: al escribir 1fr 1fr 1fr, la estamos cortando en tres porciones idénticas, y cada elemento ocupa exactamente una tercera parte.

css .container { display: grid; grid-template-columns: 1fr 1fr 1fr; }

Escribir 1fr tres veces resulta redundante. Para simplificarlo existe la función repeat [1:02], cuyo primer argumento indica la cantidad de columnas y el segundo el tamaño de cada una:

css .container { display: grid; grid-template-columns: repeat(3, 1fr); }

El resultado es idéntico, pero el código queda más limpio y fácil de mantener.

¿Cómo evitar que el diseño se rompa con minmax?

El ancho de pantalla varía entre usuarios: puede ser de 1220 px, 1440 px o cualquier otro valor [1:23]. Cuando una card tiene width: 100%, al estirar el navegador las letras se separan de la imagen, y al contraerlo el contenido se solapa [1:50]. Aquí es donde los frontends necesitan garantizar que el diseño se mantenga íntegro.

La función minmax resuelve este problema al establecer un tamaño mínimo y un tamaño máximo para cada elemento de la grilla [2:30]:

css .container { display: grid; grid-template-columns: repeat(3, minmax(200px, 300px)); }

  • El valor mínimo (200 px) impide que las cards se contraigan tanto que el texto o la imagen se distorsionen.
  • El valor máximo (300 px) evita que al estirar la ventana los elementos crezcan desproporcionadamente.

Cuando el espacio ya no alcanza para mantener todas las columnas dentro de esos límites, los elementos bajan automáticamente a la siguiente fila. Esto es lo que se conoce como grid implícita [3:48]: el navegador crea filas adicionales de forma automática sin que las hayamos declarado en el código.

¿Qué diferencia hay entre auto-fit y auto-fill?

Ambos valores sustituyen el número fijo de columnas dentro de repeat y son fundamentales para el responsive design [4:12].

  • auto-fit: toma las columnas existentes y las estira para ocupar todo el ancho disponible del navegador [4:28]. Si hay cinco elementos y sobra espacio, cada columna crece hasta llenar ese hueco.
  • auto-fill: en lugar de estirar las columnas, reserva espacio para columnas adicionales aunque no tengan contenido [4:50]. Los cinco elementos se ubican en su porción y el resto del ancho queda dividido en columnas implícitas vacías.

css /* auto-fit */ .container { grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); }

/* auto-fill */ .container { grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); }

La diferencia se nota especialmente cuando el contenedor es más ancho que la suma de los elementos: auto-fit expande, auto-fill reserva.

¿Para qué sirve fit-content en CSS Grid?

La función fit-content permite asignar un ancho específico a una columna —por ejemplo, 800 px— mientras las demás se ajustan con auto [5:18]:

css .container { grid-template-columns: fit-content(800px) auto; }

Esto resulta útil cuando una sección necesita un tamaño fijo y el resto del layout debe ser flexible. Vale la pena experimentar estirando y contrayendo el navegador para observar cómo se comporta el contenido reservado frente a las columnas automáticas.

Con estas funciones —repeat, minmax, auto-fit, auto-fill y fit-content— tienes un conjunto de herramientas poderoso para construir layouts adaptables. Abre un CodePen, crea tus cards y prueba cada propiedad cambiando el tamaño de la ventana. ¿Cuál combinación funciona mejor para tu proyecto? Comparte tu resultado en los comentarios.