W3docs

Etiqueta HTML <img>

Aprende la etiqueta HTML <img>: src y alt, srcset/sizes responsivo, carga diferida, width/height para CLS, formatos de imagen y manejo de errores.

La etiqueta <img> se utiliza para insertar una imagen en un documento HTML. La imagen en sí no se inserta directamente en el documento; el navegador la muestra a partir de la fuente especificada en la etiqueta <img>.

HTML img tag

Hay dos atributos obligatorios para un elemento <img>: src, que indica la fuente de la imagen, y alt, que define un texto alternativo para la imagen.

Para que las imágenes HTML sean clicables, debes colocar la etiqueta <img> dentro de la etiqueta <a>, que se utiliza para insertar un enlace de imagen HTML.

Sintaxis

La etiqueta <img> es vacía, lo que significa que la etiqueta de cierre no es necesaria. Solo contiene atributos. Sin embargo, en XHTML, la etiqueta <img> debe cerrarse sobre sí misma (<img />).

Ejemplo de la etiqueta HTML <img>:

Ejemplo de uso de la etiqueta HTML <img>

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
  </head>
  <body>
    <h1>Heading </h1>
    <p>This is Aleq's photo</p>
    <img src="/uploads/media/default/0001/01/25acddb3da54207bc6beb5838f65f022feaa81d7.jpeg" alt="Aleq" width="200" height="185"/>
  </body>
</html>

Podemos usar CSS para cambiar la apariencia inicial de una imagen.

Ejemplo de la etiqueta <img> con estilos CSS:

¿Cómo aplicar estilos a una etiqueta HTML <img> usando las propiedades CSS vertical-align y padding?

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      img {
      border-radius: 50%;
      border: 4px dashed #077cb9;
      width: 300px;
      display: block;
      margin: 0 auto;
      }
    </style>
  </head>
  <body>
    <div>
     <img src="/uploads/media/default/0001/03/e91b0d7a957cadd0c3282d34e423ff0f97799a1d.jpeg" alt="Ararat mountain" width="256" height="256" />
    </div>
  </body>
</html>

Atributos src y alt

El atributo src (source) indica la fuente de la imagen. Es obligatorio, ya que define la ruta hacia la imagen. El valor del atributo src puede ser el nombre del archivo o su URL.

El atributo alt define un nombre alternativo para la imagen. También es obligatorio en la etiqueta <img>. Su valor es un texto descriptivo que se muestra en el navegador antes de que la imagen se cargue, o cuando la imagen no puede cargarse.

Imágenes decorativas vs. significativas

Si alt debe contener texto depende del propósito de la imagen:

  • Imágenes significativas (una foto de producto, un gráfico, un logotipo que transmite información) necesitan un alt breve y descriptivo que comunique la misma información que la imagen. Describe lo que muestra, no "imagen de".
  • Imágenes decorativas (bordes, separadores, elementos ornamentales que no aportan contenido) deben usar un alt="" vacío. Esto indica a los lectores de pantalla que omitan la imagen. No omitas el atributo alt por completo — si falta, algunos lectores de pantalla anuncian el nombre del archivo en su lugar.
<!-- Meaningful: describe the content -->
<img src="ararat.jpg" alt="Snow-capped Mount Ararat at sunrise" />

<!-- Decorative: empty alt so assistive tech skips it -->
<img src="divider.png" alt="" />
Consejo

Para las imágenes significativas, incluye palabras clave relevantes en el texto alternativo donde encajen de forma natural. Un texto alt preciso beneficia tanto la accesibilidad como el posicionamiento de la imagen en los motores de búsqueda.

Uso de "data:image/[type];base64,[base64-string]" para el atributo src

El formato data:image/[type];base64,[base64-string] puede utilizarse como valor del atributo src de una etiqueta img para mostrar una imagen directamente desde el código HTML, sin necesidad de cargarla desde un archivo externo.

Aquí tienes un ejemplo de cómo usar este formato para mostrar una imagen en una etiqueta img:

Uso de "data:image/[type];base64,[base64-string]" para el atributo src

<img
  src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="
  alt="Tiny base64-encoded sample image"
  width="5"
  height="5">

En este ejemplo, image/png especifica el tipo MIME de la imagen, y la cadena larga después de base64, son los datos reales de la imagen codificados en base64. La cadena anterior es un PNG completo (aunque diminuto) de 5×5.

Ten en cuenta que usar imágenes codificadas en base64 puede aumentar el tamaño del archivo HTML y ralentizar la carga de la página. En general, se recomienda usar este formato para imágenes pequeñas o iconos, y utilizar archivos externos para imágenes más grandes.

Ejemplo de la etiqueta HTML <img> con los atributos src y alt:

Ejemplo de la etiqueta img con los atributos src y alt

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
  </head>
  <body>
    <img src="/uploads/media/default/0001/03/01cc5ccf0ce755075e468cc651f27c354e1b032e.jpeg" alt="Paris" width="256" height="256" />
  </body>
</html>

Por qué establecer width y height

Establece siempre los atributos width y height (en píxeles, sin unidades) para que coincidan con el tamaño intrínseco de la imagen. Esto permite al navegador calcular la relación de aspecto de la imagen y reservar el espacio correcto antes de que el archivo termine de descargarse. Sin estos atributos, la página se renderiza inicialmente sin espacio para la imagen y luego da un salto cuando esta llega — una mala experiencia que perjudica tu Cumulative Layout Shift (CLS), uno de los Core Web Vitals de Google.

<!-- Browser reserves a 4:3 box immediately, so no layout shift -->
<img src="photo.jpg" alt="Mountain view" width="800" height="600">

Aún puedes redimensionar la imagen con CSS. Un patrón común y seguro es establecer los atributos width y height para la relación de aspecto y luego usar CSS para hacerla fluida:

img {
  height: auto;   /* preserve aspect ratio */
  max-width: 100%; /* never overflow its container */
}

Los atributos loading y decoding

El atributo loading difiere la carga de imágenes (e iframes) hasta que el recurso esté cerca de ser mostrado. Es una característica estándar compatible con todos los navegadores modernos.

Valores admitidos para el atributo loading:

  • lazy — difiere la carga hasta que la imagen alcanza un umbral de distancia desde el viewport. Úsalo para imágenes fuera de pantalla / debajo del pliegue.
  • eager (el valor predeterminado) — carga el recurso de inmediato.
<img src="defer.png" loading="lazy" alt="Gallery thumbnail" width="500" height="400">
Advertencia

No apliques carga diferida a la imagen más importante visible sin desplazamiento (a menudo el elemento Largest Contentful Paint, o LCP). La carga diferida retrasa su solicitud y hace que la página parezca más lenta. Para esa imagen usa loading="eager" o simplemente omite el atributo.

El atributo relacionado decoding indica al navegador cómo debe decodificar la imagen. decoding="async" permite al navegador decodificar la imagen fuera del hilo principal, evitando bloquear el renderizado del contenido circundante:

<img src="photo.jpg" alt="Landscape" width="800" height="600"
     loading="lazy" decoding="async">

La carga diferida pospone la carga de recursos hasta que son necesarios, en lugar de cargar todo de antemano. Esto mejora el rendimiento y reduce el consumo innecesario de datos en el dispositivo del usuario.

Imágenes responsivas con srcset y sizes

Una imagen fija única o desperdicia ancho de banda en pantallas pequeñas o se ve borrosa en pantallas grandes. Los atributos srcset y sizes permiten al navegador elegir el archivo más adecuado según el tamaño y la densidad de píxeles de la pantalla del dispositivo, manteniendo un único elemento <img>.

  • srcset enumera los archivos de imagen candidatos, cada uno etiquetado con un descriptor de anchura (el ancho real de la imagen en píxeles, por ejemplo 480w).
  • sizes indica al navegador el ancho con el que se mostrará la imagen en diferentes puntos de ruptura, para que pueda elegir antes de que se calcule el diseño.
<img
  src="photo-800.jpg"
  srcset="photo-480.jpg 480w,
          photo-800.jpg 800w,
          photo-1200.jpg 1200w"
  sizes="(max-width: 600px) 100vw,
         (max-width: 1000px) 50vw,
         800px"
  alt="Coastline at sunset"
  width="800" height="600">

Aquí el navegador lee sizes, calcula cuántos píxeles CSS necesita la imagen, los multiplica por la relación de píxeles del dispositivo y descarga la coincidencia más cercana de srcset. El src simple permanece como alternativa para navegadores que no admiten srcset.

Cuando necesitas servir recortes diferentes para distintos diseños (art direction) u ofrecer formatos modernos con alternativa (como AVIF/WebP con respaldo en JPEG), usa el elemento <picture>.

Formatos de imagen admitidos

Los formatos de archivo de imagen son medios estandarizados para organizar y almacenar imágenes digitales. Un formato puede almacenar datos sin compresión, con compresión (que puede ser sin pérdida o con pérdida) o en formato vectorial. (Wikipedia).

Cada agente de usuario admite distintos formatos de imagen. A continuación se muestra la lista de formatos comunes:

AbreviaturaFormato de archivoTipo MIMEExtensión(es)Compatibilidad con navegadores
APNGAnimated Portable Network Graphicsimage/apng.apngChrome, Edge, Firefox, Opera, Safari
AVIFAV1 Image File Formatimage/avif.avifChrome 85+, Firefox 93+, Safari 16+, Opera
GIFGraphics Interchange Formatimage/gif.gifChrome, Edge, Firefox, Opera, Safari
ICOMicrosoft Iconimage/x-icon.ico, .curChrome, Edge, Firefox, Opera, Safari
JPEGJoint Photographic Expert Group imageimage/jpeg.jpg, .jpeg, .jfif, .pjpeg, .pjpChrome, Edge, Firefox, Opera, Safari
PNGPortable Network Graphicsimage/png.pngChrome, Edge, Firefox, Opera, Safari
SVGScalable Vector Graphicsimage/svg+xml.svgChrome, Edge, Firefox, Opera, Safari
WebPWeb Picture formatimage/webp.webpChrome, Edge, Firefox, Opera, Safari 14+

JPEG y PNG son universalmente compatibles y siguen siendo las opciones más seguras. WebP y AVIF son formatos modernos que producen archivos notablemente más pequeños con calidad similar — AVIF suele comprimir mejor, WebP tiene mayor compatibilidad. Dado que algunos navegadores más antiguos aún no admiten AVIF, sirve estos formatos a través del elemento <picture> con una alternativa en JPEG o PNG, en lugar de colocarlos directamente en un <img src>.

Errores al cargar imágenes

Pueden producirse errores al cargar una imagen. Si se ha establecido un controlador de eventos onerror para el evento de error, ese controlador será llamado. A continuación se describen las situaciones en que esto puede ocurrir:

  • El atributo src está vacío ("") o es null.
  • La URL del src y la URL de la página que el usuario está visitando son la misma.
  • La imagen está dañada e impide que se cargue.
  • Los metadatos de la imagen están dañados de tal manera que es imposible obtener sus dimensiones, y no se especifican dimensiones en los atributos de la etiqueta <img>.
  • El formato no es compatible con el agente de usuario.

Puedes escuchar ese evento error con el atributo onerror y mostrar una imagen alternativa, para que los usuarios vean un marcador de posición en lugar del icono de imagen rota:

<img
  src="profile.jpg"
  alt="User profile photo"
  width="200" height="200"
  onerror="this.onerror=null; this.src='fallback.png';">

Establecer this.onerror=null primero es importante: elimina el controlador antes de cambiar el src, para que si la imagen alternativa también falla al cargarse, no se vuelva a activar el controlador y se genere un bucle infinito.

Atributos

Estos son los atributos estándar actuales del elemento <img>. Los atributos obsoletos se enumeran por separado a continuación.

AtributoValorDescripción
alttextoDefine el texto alternativo de la imagen. Usa alt="" para imágenes puramente decorativas.
crossoriginanonymous | use-credentialsDefine si se usa CORS al cargar la imagen. Las imágenes cargadas mediante CORS pueden usarse en el elemento <canvas> sin limitar su funcionalidad.
decodingsync | async | autoIndica al navegador cómo debe decodificar la imagen. async decodifica fuera del hilo principal.
heightpíxelesDefine la altura de la imagen. Establécelo junto con width para reservar espacio y evitar el desplazamiento de diseño.
ismapismapEspecifica que el contenido de la etiqueta es un mapa de imagen del lado del servidor.
loadingeager | lazyControla si la imagen se carga de inmediato o se difiere hasta que esté cerca del viewport.
sizescondiciones de medios + longitudesIndica al navegador el ancho mostrado de la imagen por punto de ruptura, usado junto con srcset.
srcURLDefine la fuente de la imagen.
srcsetURL + descriptoresLista separada por comas de imágenes candidatas y sus descriptores de anchura (w) o densidad (x).
usemap#mapnameEspecifica un enlace al elemento <map>, que contiene las coordenadas del mapa de imagen del lado del cliente.
widthpíxelesDefine el ancho de la imagen. Establécelo junto con height para reservar espacio y evitar el desplazamiento de diseño.

La etiqueta <img> también admite los Atributos globales y los Atributos de eventos.

Atributos obsoletos

Estos atributos están en desuso en HTML5. En su lugar, usa las alternativas CSS.

AtributoValoresDescripciónAlternativa
alignleft right top bottom middleDefine la alineación de la imagen con respecto a los elementos circundantes. Centra la imagen HTML con respecto a los elementos circundantes.Las propiedades CSS float y/o vertical-align.
borderpíxelesDefine el ancho del borde alrededor de la imagen.La propiedad CSS border.
hspaceLa propiedad CSS margin en su lugar.
nameEspecifica un nombre para el elemento.El atributo id.
vspacepíxelesDefine el espacio en la parte superior e inferior de la imagen.Usa la propiedad CSS margin en su lugar.

Práctica

Práctica
¿Cuál es la forma correcta de marcar una imagen puramente decorativa para que los lectores de pantalla la omitan?
¿Cuál es la forma correcta de marcar una imagen puramente decorativa para que los lectores de pantalla la omitan?
Was this page helpful?