Tema 18 · Grid Fracciones y Responsive

CSS Grid: Fracciones (fr), repeat() y auto-fit

Aprende la unidad fraccional fr, la función repeat(), dimensionamiento dinámico con minmax() y cómo crear cuadrículas responsivas automáticas sin escribir media queries.

La Unidad Fraccional (fr)

La unidad fr (fracción) representa una porción proporcional del espacio disponible dentro del contenedor de la cuadrícula.

/* Columna lateral fija de 250px y contenido principal que absorbe todo el resto */
.layout {
  display: grid;
  grid-template-columns: 250px 1fr;
}

/* 3 columnas de proporciones 1 : 2 : 1 */
.columnas-asimetricas {
  display: grid;
  grid-template-columns: 1fr 2fr 1fr;
}

La Función repeat()

En lugar de escribir grid-template-columns: 1fr 1fr 1fr 1fr, simplificamos la sintaxis con la función de repetición:

/* 4 columnas idénticas de 1 fracción */
grid-template-columns: repeat(4, 1fr);

La Fórmula Mágica Responsiva: repeat(auto-fit, minmax(...))

Esta es la técnica más avanzada del CSS moderno para crear galerías y catálogos de tarjetas 100% responsivos sin una sola Media Query:

.galeria-automatica {
  display: grid;
  /* Cada tarjeta medirá mínimo 240px; si hay espacio crecen hasta 1fr */
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap: 20px;
}
  • minmax(240px, 1fr): Las columnas nunca serán menores a 240px, pero pueden crecer indefinidamente para llenar la pantalla.
  • auto-fit: Calcula cuántas columnas de al menos 240px caben en la ventana y expande las existentes para que no queden huecos vacíos.

⚡ Galería Totalmente Responsiva sin Media Queries

Redimensiona la ventana del navegador o cambia el ancho de la pantalla: el grid calcula automáticamente el número de columnas (de 1 a 4) según el espacio disponible:

index.html
Solo lectura
<!DOCTYPE html>
<html lang="es">
<head>
  <meta charset="UTF-8">
  <title>CSS Grid: Fracciones y Auto-Fit</title>
  <style>
    body {
      font-family: Arial, Helvetica, sans-serif;
      background-color: #f1f5f9;
      margin: 0;
      padding: 25px;
      color: #0f172a;
    }

    /* Cuadrícula responsiva automática */
    .catalogo-cursos {
      display: grid;
      grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
      gap: 20px;
      max-width: 1000px;
    }

    .tarjeta-curso {
      background: white;
      border: 1px solid #cbd5e1;
      border-radius: 12px;
      padding: 20px;
      box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);
      transition: transform 0.2s ease, box-shadow 0.2s ease;
    }

    .tarjeta-curso:hover {
      transform: translateY(-4px);
      box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
    }

    .icono-tecnologia {
      width: 44px;
      height: 44px;
      border-radius: 8px;
      background: #eff6ff;
      color: #2563eb;
      display: flex;
      align-items: center;
      justify-content: center;
      font-weight: 800;
      margin-bottom: 12px;
    }

    h4 {
      margin: 0 0 6px 0;
      color: #0f172a;
    }

    p {
      margin: 0;
      font-size: 0.85rem;
      color: #64748b;
      line-height: 1.5;
    }
  </style>
</head>
<body>

  <h3>Catálogo Inteligente con repeat(auto-fit, minmax(220px, 1fr))</h3>
  <p style="color: #64748b; margin-bottom: 20px;">
    No requiere @media queries. Cada tarjeta se reacomoda de forma natural:
  </p>

  <div class="catalogo-cursos">
    <div class="tarjeta-curso">
      <div class="icono-tecnologia">HTML</div>
      <h4>HTML5 Semántico</h4>
      <p>Aprende la arquitectura estándar de documentos web modernos.</p>
    </div>

    <div class="tarjeta-curso">
      <div class="icono-tecnologia" style="color: #0284c7; background: #e0f2fe;">CSS</div>
      <h4>CSS3 & Grid</h4>
      <p>Domina maquetaciones bidimensionales y efectos visuales fluidos.</p>
    </div>

    <div class="tarjeta-curso">
      <div class="icono-tecnologia" style="color: #d97706; background: #fef3c7;">JS</div>
      <h4>JavaScript ES6+</h4>
      <p>Crea interfaces interactivas y asíncronas de alto rendimiento.</p>
    </div>

    <div class="tarjeta-curso">
      <div class="icono-tecnologia" style="color: #7c3aed; background: #ede9fe;">PHP</div>
      <h4>PHP 8.3 & MySQL</h4>
      <p>Desarrollo backend robusto con tipado estricto y bases de datos.</p>
    </div>
  </div>

</body>
</html>
Pruébalo tú mismo » Se abre en una nueva pestaña con ejecución en vivo
🦉
¿Tienes dudas con este tema?
Sócrates AI puede darte analogías y explicarte este código paso a paso.

🚀 ¿Quieres dominar Manual Completo de CSS3, Flexbox y Grid y crear proyectos reales?

Aprende arquitectura limpia, desarrollo web moderno, buenas prácticas y despliegue en producción con nuestro Bootcamp Fullstack Developer con mentorías en vivo.

🏛️ Autoría y Propiedad Intelectual: Obra educativa original de David Amador para Kilopolis Academia (Solucionáticos), estructurada sobre las especificaciones y estándares abiertos del W3C, el estándar vivo de WHATWG y la documentación oficial de código abierto. © Todos los derechos reservados.