Optimización y Responsividad con NextImage en Next.js

Clase 15 de 57Curso de Next.js 14

Contenido del curso

Conceptos básicos de Next.js 14

Manejo de estilos y estáticos en Next.js 14

Next.js Avanzado

Autenticación y autorización

Resumen

Optimizar imágenes en aplicaciones web no solo mejora el rendimiento, sino que transforma por completo la experiencia de usuario. El componente Next Image ofrece herramientas poderosas para lograr esto, pero requiere conocer ciertos detalles para aprovechar todo su potencial, especialmente cuando se busca un diseño responsive y efectos visuales como el blur placeholder.

¿Cómo hacer una imagen responsive con la propiedad fill?

Cuando se define un width y un height fijos en el componente Image, la imagen puede romperse en pantallas más pequeñas como celulares o tablets [01:00]. La solución es reemplazar esas dimensiones fijas por la propiedad fill. Esta propiedad hace que la imagen ocupe el cien por ciento del ancho y alto de su contenedor padre.

El truco fundamental está en envolver la imagen dentro de un div contenedor y asignarle estilos específicos [01:34]. Por ejemplo:

  • Crear un div con un className como imageContainer.
  • Definir en los estilos SASS o CSS el width y height deseados.
  • Agregar position: relative al contenedor, ya que la imagen con fill recibe automáticamente position: absolute [02:22].

Gracias a este patrón, se pueden escribir media queries dentro del contenedor para modificar las dimensiones según el tamaño de pantalla [03:28]. Next.js genera automáticamente diferentes sizes optimizados para cada resolución, ya sea 1080 o 1440 píxeles, seleccionando la versión más adecuada.

¿Qué hace la propiedad object fit en el componente image?

Cuando se usa fill, la propiedad object-fit controla cómo se comporta la imagen dentro del canvas disponible [03:58]:

  • contain: la imagen se expande lo máximo posible sin perder sus proporciones originales.
  • cover: la imagen se amplía para cubrir todo el espacio del padre, recortando si es necesario.

Esto resulta muy útil para crear layouts atractivos que respeten la proporción original de cada imagen [04:40].

¿Cómo agregar un placeholder blur a las imágenes?

El placeholder blur es un efecto que muestra una versión borrosa y ligera de la imagen mientras esta termina de cargar [05:08]. Para implementarlo se necesitan dos propiedades en el componente Image:

  • placeholder="blur".
  • blurDataURL con un string en formato base 64 que representa una versión preoptimizada de la imagen.

¿Cómo generar el blur data URL?

Existen herramientas en línea como Blur Deep que permiten subir la imagen y obtener el data URL correspondiente [05:34]. Se puede ajustar la calidad del placeholder: un valor alrededor del 80 % ofrece un buen balance entre nitidez del efecto y peso del archivo [06:00].

Una buena práctica es almacenar este valor como una constante fuera del componente para mejorar el rendimiento en React y mantener el código limpio [06:18]. Si se prefiere, puede guardarse en un archivo separado.

Para verificar el efecto, se pueden usar las herramientas de desarrollador del navegador configurando la red en slow 3G y recargando sin caché [06:42]. La imagen aparece primero con el blur y progresivamente se carga la versión completa.

¿Qué ventajas y trade offs tiene esta optimización?

Este efecto de blur mantiene los estándares de las Core Web Vitals porque no altera el tamaño del layout ni de la imagen, solo cambia el contenido visual durante la carga [07:22]. El LCP (Largest Contentful Paint) se beneficia directamente de esta estrategia.

Sin embargo, existen consideraciones importantes:

  • El desarrollo se vuelve más complejo al manejar de forma estática cada imagen y su blur data URL [07:42].
  • Las imágenes dinámicas, como las que provienen de una API o una URL que cambia constantemente, no pueden generar este efecto fácilmente [07:56].
  • Para imágenes dinámicas, aún se puede aprovechar el componente Image con dimensiones fijas de width y height.

La recomendación final es diseñar layouts lo más flexibles posible, sin cambios bruscos de proporciones, y aprovechar al máximo el componente Image especialmente cuando las imágenes son estáticas. ¿Ya implementaste estas optimizaciones en tu proyecto? Comparte tu experiencia y qué estrategia te funcionó mejor.