Cargar imágenes por resolución con HTML5

11/Feb/2021 HTML5 , Deja un comentario

Normalmente la forma de cargar imágenes en HTML es mediante el elemento img al cual pasamos como parámetro la URL de la imagen a cargar. Pero desde HTML5 disponemos del elemento picture que nos ayuda a eficientar y cargar imágenes por resolución con HTML5. Es decir, dependiendo de la resolución a la que tengamos la pantalla se mostrará una imagen u otra, lógicamente adaptada a la resolución que esté la pantalla en ese momento. De esta manera podemos construir mejores aplicaciones responsive.

Pero pasemos a definir el problema. La idea es que el usuario puede cargar nuestra página en diferentes dispositivos, ya sea un móvil, una tablet o un ordenador. En cada uno el tamaños de dispositivos la página se verá de forma diferente. Y lo que nos interesa es en cada tamaño cargar una imagen adaptada a dicho tamaño.

Si utilizamos el elemento img tendremos lo siguiente:

<img src="imagen.png" alt="imagen general"/>

En el caso de que utilicemos el elemento img se cargará siempre la misma imagen independientemente del tamaño de la pantalla.

Es por eso que recurrimos al elemento picture el cual tiene la siguiente estructura.

<picture>
 <source srcset="imagen" media="media-query">
 <source srcset="imagen" media="media-query">
 <source srcset="imagen" media="media-query">
 ...
 <img src="image-fallback" alt="Imagen si no funciona picture">
</picture>

Lo que ya vemos es que en el elemento picture podemos indicar varios orígenes mediante el elemento source. Además si nos fijamos en el elemento source vemos que disponemos de dos atributos. Por un lado el atributo srcset en el cual pasamos la URL de la imagen que queremos mostrar y por otro lado tenemos un atributo media en el que podemos indicar una media query. En el caso de que la media query de un valor true será cuando se muestre la imagen indicada en el atributo srcset.

Y será esta media query con la que gestionaremos el tamaño del dispositivo. Las media query nos permiten acceder a datos de configuración del dispositivo como puede ser tamaño mínimo o máximo de la pantalla (min-width y max-width, min-height y max-height), la resolución (resolution), el número de colores que se utilizan (color-index),…

En nuestro vamos a utilizar la propiedad min-width que nos dará el tamaño mínimo de la pantalla. La utilizaremos de la siguiente forma:

(min-width: size px)

Donde el tamaño será el tamaño en pixels de la pantalla. Vamos a controlar varios tamaños.

  • 48opx, para móviles.
  • 768px, para tablets.
  • 992px, para pc.
  • 1280px, para pc con pantalla grande.

De esta forma los media query nos quedaría de la siguiente forma:

min-width: 1280px;
min-width: 992px;
min-width: 768px;
min-width: 480px;

Si lo aplicamos al código de nuestro elemento picture tendremos el siguiente resultado:

<picture>        
  <source srcset="imagen1280.png" media="(min-width: 1280px)">
  <source srcset="imagen992.png" media="(min-width: 992px)">
  <source srcset="imagen768.png" media="(min-width: 768px)">
</picture>

Si nos fijamos vemos que hemos creado una imagen optimizada para cada resolución. Pero que no hemos creado una para la mínima de 480px y es que en este caso lo que vamos a hacer es insertar un elemento img que será el que se cargue en todos los casos y además nos sirve para proteger la visualización si nuestro navegador no soporta los elementos HTML5.

El código final nos quedaría de la siguiente forma.

<picture>        
  <source srcset="imagen1280.png" media="(min-width: 1280px)">
  <source srcset="imagen992.png" media="(min-width: 992px)">
  <source srcset="imagen768.png" media="(min-width: 768px)">
  <img src="imagen480.png" alt="MDN">
</picture>

Si cargamos la página vemos como mediante el comportamiento responsive implementado el código, van cambiando las imágenes. Permitiendo tener una web más optimizada que nos permita cargar imágenes por resolución con HTML5.

 

 

Vídeos sobre HTML5


¿Algo que nos quieras comentar?

Déjanos tu comentario, no te preocupes que tu email no será publicado

*

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.