Tutorial WordPress: Pasar de tres a una columna en móvil con CSS Grid auto-fit

·

·

Introducción

En este tutorial detallado veremos cómo pasar una cuadrícula de tres columnas a una sola columna en dispositivos móviles utilizando CSS Grid con la técnica repeat(auto-fit, minmax(…)). Aplicaremos la solución a un entorno WordPress, indicando dónde colocar el CSS (Custom CSS, child theme o enqueue) y mostrando ejemplos concretos del marcado del bucle (loop) y del CSS necesario. También explico por qué funciona auto-fit frente a auto-fill, cómo elegir los valores de minmax para controlar el comportamiento y soluciones para casos comunes (márgenes, imágenes, orden visual, y compatibilidad).

Conceptos clave

Preparar el HTML en WordPress (ejemplo del loop)

En un tema típico de WordPress, la cuadrícula contendrá las entradas (posts) dentro de un contenedor. Un ejemplo simplificado del loop dentro de un archivo de plantilla:

ltdiv class=posts-gridgt
  ltarticle class=post-itemgt...lt/articlegt
  ltarticle class=post-itemgt...lt/articlegt
  ltarticle class=post-itemgt...lt/articlegt
  lt!-- más .post-item --gt
lt/divgt

Si usas el editor de bloques (Gutenberg), añade una clase CSS a la fila de columnas o al bloque que envuelve las tarjetas para aplicar la misma lógica.

Ejemplo CSS: tres columnas en escritorio y una columna en móvil con auto-fit

Este CSS usa auto-fit y minmax para crear columnas que ocupan desde 260px hasta 1fr, lo que normalmente da 3 columnas en pantallas anchas y las reduce automáticamente cuando el ancho disponible no alcanza para 3. Si quieres forzar exactamente una columna por debajo de cierto ancho (por ejemplo 640px), se puede añadir una media query.

/ Contenedor grid /
.posts-grid {
  display: grid
  gap: 1.25rem / separación entre tarjetas /
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr))
  align-items: start
  margin: 0 auto
  padding: 0 1rem
  box-sizing: border-box
}

/ Opcional: estilo base de cada tarjeta/post /
.post-item {
  background: #fff
  border: 1px solid rgba(0,0,0,0.06)
  padding: 1rem
  display: flex
  flex-direction: column
  min-height: 100px
}

/ Ajustes para imágenes responsivas dentro de las tarjetas /
.post-item img {
  max-width: 100%
  height: auto
  display: block
}

Para forzar una columna en móvil (media query)

Si prefieres asegurar que en pantallas pequeñas sea exactamente una columna, añade una media query que cambie grid-template-columns a 1fr por debajo de tu breakpoint elegido:

/ Forzar 1 columna en pantallas pequeñas /
@media (max-width: 640px) {
  .posts-grid {
    grid-template-columns: 1fr
    gap: 1rem / opcional: ajustar separación en móvil /
  }
}

Por qué elegir auto-fit con minmax para este caso

  1. Flexibilidad: Las columnas se ajustan automáticamente a la anchura disponible sin necesidad de cambiar el número de columnas manualmente.
  2. Control mínimo-máximo: minmax permite definir el tamaño mínimo de una tarjeta antes de que tenga que colapsar a la siguiente fila así controlas cuándo baja de 3 a 2 y de 2 a 1.
  3. Compatibilidad: CSS Grid está ampliamente soportado en navegadores modernos. Para navegadores muy antiguos puedes usar un fallback con flexbox o un diseño de listas.

Elegir los valores de minmax

Cómo determinar el valor mínimo (ej. 260px)

Cómo añadir este CSS en WordPress

  1. Opción rápida: Apariencia gt Personalizar gt CSS adicional. Pega el CSS ahí y guarda.
  2. Opción de tema hijo (recomendada): Crea o edita style.css del child theme y añade el CSS. Para asegurar carga correcta, en functions.php del child theme encola las hojas.
/ Enqueue del style.css del child theme /
function mi_tema_hijo_styles() {
    wp_enqueue_style( mi-theme-child-style, get_stylesheet_uri(), array(parent-style-handle), wp_get_theme()->get(Version) )
}
add_action( wp_enqueue_scripts, mi_tema_hijo_styles )

Si prefieres añadir un archivo CSS específico (por ejemplo assets/css/grid.css), encola ese archivo:

function mi_grid_custom_styles() {
    wp_enqueue_style( mi-grid-css, get_stylesheet_directory_uri() . /assets/css/grid.css, array(), 1.0 )
}
add_action( wp_enqueue_scripts, mi_grid_custom_styles )

Consideraciones de accesibilidad y experiencia

Compatibilidad y fallback

CSS Grid funciona en la mayoría de navegadores modernos. Para navegadores antiguos o escenarios donde necesites mayor compatibilidad, añade un fallback con display:flex o con un layout basado en floats para que el diseño no rompa:

/ Fallback simple con flexbox: se aplica en navegadores que no soportan grid (se declara primero grid y luego flex funciona como fallback en algunos casos) /
.posts-grid {
  display: grid
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr))
  gap: 1.25rem
}

/ Fallback: si decides añadir una clase .no-grid en  vía script o Modernizr, puedes usar: /
.no-grid .posts-grid {
  display: flex
  flex-wrap: wrap
  gap: 1.25rem
}
.no-grid .post-item {
  flex: 1 1 260px / ancho base similar al minmax minimo /
  max-width: calc(33.333% - 0.83rem) / intenta replicar 3 columnas /
}

Problemas frecuentes y solución

Ejemplo completo práctico

HTML simplificado (loop) y CSS juntos — en una página de archivo o plantilla de blog:

ltsection class=posts-archivegt
  ltdiv class=posts-gridgt
    ltarticle class=post-itemgt
      ltimg src=imagen.jpg alt=Descripción /gt
      lth3gtTítulo del postlt/h3gt
      ltpgtExtracto o resumen...lt/pgt
    lt/articlegt
    lt!-- repetir .post-item --gt
  lt/divgt
lt/sectiongt
.posts-grid {
  display: grid
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr))
  gap: 1.5rem
  margin: 0 auto
}

/ 1 columna segura en móviles /
@media (max-width: 640px) {
  .posts-grid {
    grid-template-columns: 1fr
    gap: 1rem
  }
}

Conclusión práctica

Usar repeat(auto-fit, minmax(…)) es una solución potente para conseguir que una cuadrícula que en escritorio muestra tres columnas pase a menos columnas en pantallas más pequeñas de forma fluida. Para asegurar una única columna en móviles, añade una media query en torno a 640px (o el breakpoint que uses). En WordPress puedes añadir el CSS desde el Personalizador o mediante un child theme y encolar los estilos en functions.php. Con esto obtendrás una solución responsive, eficiente y fácil de mantener.



Leave a Reply

Your email address will not be published. Required fields are marked *