Elemento picture para imágenes adaptativas
El elemento picture sirve para ofrecer varias versiones de una misma imagen, adaptándose al entorno de visualización del usuario. Permite:
- Ofrecer distintos formatos (AVIF, WebP, JPEG).
- Definir diferentes resoluciones (
1x,2x, etc.). - Aplicar art direction: imágenes distintas según tamaño de pantalla.
- Optimizar la carga y mejorar la experiencia.
Anatomía de <picture>
| Etiqueta | Descripción | Atributos clave |
|---|---|---|
| <picture> | Contenedor de fuentes y fallback | Ninguno |
| <source> | Define una versión de la imagen según condiciones | srcset, type, media, sizes |
| <img> | Imagen de respaldo si ninguna source coincide |
src, alt, loading |
Uso de srcset y sizes
srcset lista archivos con sus densidades o anchos. sizes define el ancho de la imagen en diferentes condiciones de media.
<picture>
<source
type='image/avif'
srcset='img/portada-400.avif 400w,
img/portada-800.avif 800w,
img/portada-1200.avif 1200w'
sizes='(max-width: 600px) 100vw, 50vw'
>
<source
type='image/webp'
srcset='img/portada-400.webp 400w,
img/portada-800.webp 800w,
img/portada-1200.webp 1200w'
sizes='(max-width: 600px) 100vw, 50vw'
>
<img
src='img/portada-800.jpg'
alt='Vista panorámica de montañas'
loading='lazy'
width='1200' height='800'
>
</picture>
-
El navegador elige el primer
sourcecompatible con formato y condiciones. -
Si no coincide, usa la etiqueta
imgde respaldo. -
loading='lazy'retrasa la carga de imágenes fuera de pantalla.
Art Direction: imágenes distintas según media queries
Podemos servir una composición diferente de la misma escena, por ejemplo, recortar enfoque en móvil.
<picture>
<source
media='(max-width: 600px)'
srcset='img/banner-mobile.jpg'
type='image/jpeg'
>
<source
media='(min-width: 601px)'
srcset='img/banner-desktop.jpg'
type='image/jpeg'
>
<img
src='img/banner-default.jpg'
alt='Banner promocional'
loading='lazy'
>
</picture>
-
mediaactúa como en CSS, el primersourcecuyomediasea true se usa. - Ideal para cambiar no solo resolución, sino composición y encuadre.
Detallando atributos
- srcset
-
Lista de fuentes separadas por comas. Cada fuente puede indicar su ancho (
w) o densidad (x). - sizes
- Lista de pares media-condition / tamaño. El navegador calcula qué recurso elegir.
- type
-
MIME type (
image/avif,image/webp, etc.). Filtra rápidamente si el navegador soporta el formato. - media
- Media query asociada. Ideal para art direction.
- loading
-
lazyoeager. Sugiere al navegador cuándo cargar la imagen.
Buenas prácticas
- Generar variantes optimizadas mediante herramientas de build (Sharp, imagemin).
-
Incluir al menos un
sourcemoderno (AVIF/WebP) y unimgtradicional. -
Definir siempre
widthyheighten elimgde respaldo para evitar salto de contenido. -
Utilizar
loading='lazy'para páginas con muchas imágenes. -
Ajustar
sizesa tu diseño responsive para permitir decisiones óptimas.
Ejemplo completo con formatos y art direction
<picture>
<!-- AVIF para navegadores compatibles -->
<source
type='image/avif'
srcset='
images/hero-mobile.avif 600w,
images/hero-desktop.avif 1200w
'
media='(max-width: 800px)'
>
<!-- WebP de respaldo -->
<source
type='image/webp'
srcset='
images/hero-mobile.webp 600w,
images/hero-desktop.webp 1200w
'
media='(max-width: 800px)'
>
<!-- JPEG fallback para todos los dispositivos -->
<source
srcset='
images/hero-mobile.jpg 600w,
images/hero-desktop.jpg 1200w
'
sizes='(max-width: 800px) 100vw, 50vw'
>
<!-- Imagen de respaldo -->
<img
src='images/hero-default.jpg'
alt='Persona contemplando paisaje al amanecer'
loading='lazy'
width='1200'
height='800'
>
</picture>
Resumen de flujo de elección
- Comprueba el primer
sourcecuyomediasea true. - De ese
source, selecciona el formato soportado (type). - Según
srcsetysizes, escoge la URL más adecuada. - Si no hay
sourceválido, usa la etiquetaimg.
Deja una respuesta
Lo siento, debes estar conectado para publicar un comentario.