Images in HTML
Images make web pages visually engaging. HTML provides elements for embedding images, providing fallbacks, and adapting to different screen sizes.
img tag
The <img> element embeds an image in the page. It is a void element (self-closing).
<img src="photo.jpg" alt="A scenic mountain landscape"> Required attributes
| Attribute | Purpose |
|---|---|
src |
Image URL (path to the image file) |
alt |
Alternative text - describes the image for screen readers and when the image fails to load |
Optional attributes
<img
src="photo.jpg"
alt="Sunset over the ocean"
width="800"
height="600"
loading="lazy"
decoding="async"
> | Attribute | Values | Purpose |
|---|---|---|
width |
pixels | Display width (maintains aspect ratio with height) |
height |
pixels | Display height |
loading |
eager (default), lazy |
Lazy loading - defers loading off-screen images |
decoding |
sync, async, auto |
Image decoding hint for the browser |
fetchpriority |
high, low, auto |
Priority hint for loading |
referrerpolicy |
no-referrer, origin, etc. |
Referrer information |
sizes |
media query + width | Used with srcset for responsive images |
srcset |
comma-separated URLs + widths | Multiple resolution options |
crossorigin |
anonymous, use-credentials |
CORS settings |
Image formats
| Format | Use Case | Pros |
|---|---|---|
JPEG (.jpg) |
Photographs, complex scenes | Small file size, 16M colours |
PNG (.png) |
Logos, icons, screenshots | Lossless, transparency support |
GIF (.gif) |
Simple animations | Animations |
WebP (.webp) |
Modern replacement for JPEG/PNG | Smaller size, transparency + animation |
AVIF (.avif) |
Next-gen format | Even smaller than WebP, HDR support |
SVG (.svg) |
Icons, illustrations, logos | Scalable (vector), tiny file size |
figure tag
<figure> groups an image with a caption (<figcaption>):
<figure>
<img src="chart.png" alt="Bar chart showing quarterly sales">
<figcaption>Figure 1: Quarterly sales for 2026</figcaption>
</figure>
<figure>
<figcaption>Team photo at the annual conference</figcaption>
<img src="team.jpg" alt="Team photo">
</figure> <figcaption> can go before or after the image. One <figure> can contain multiple images.
Responsive Images with srcset
The srcset attribute lets the browser choose the best image resolution based on the device’s screen size and pixel density:
Width-based selection
<img
src="photo-800.jpg"
srcset="photo-400.jpg 400w,
photo-800.jpg 800w,
photo-1200.jpg 1200w,
photo-1600.jpg 1600w"
sizes="(max-width: 600px) 100vw,
(max-width: 1200px) 50vw,
33vw"
alt="Landscape photo"
> srcset: lists images with their actual width in pixels (400w,800w, etc.).sizes: tells the browser how wide the image will be displayed at different breakpoints (100vw= full viewport width,50vw= half,33vw= one-third).
The browser selects the smallest image that fits the layout at the device’s pixel density.
Pixel density selection
<img
src="icon-1x.png"
srcset="icon-1x.png 1x,
icon-2x.png 2x,
icon-3x.png 3x"
alt="Icon"
> Use 1x, 2x, 3x for standard, retina (2×), and super-retina (3×) displays.
picture tag
The <picture> element provides art direction - different images for different screen sizes or formats. It contains multiple <source> elements and one <img> fallback.
Format fallbacks (WebP with JPEG/PNG fallback)
<picture>
<source srcset="photo.avif" type="image/avif">
<source srcset="photo.webp" type="image/webp">
<img src="photo.jpg" alt="Landscape">
</picture> The browser uses the first <source> with a format it supports. If none match, it falls back to the <img> tag.
Art direction (crop for mobile)
<picture>
<source
media="(max-width: 600px)"
srcset="photo-cropped.jpg"
>
<source
media="(min-width: 601px)"
srcset="photo-full.jpg"
>
<img src="photo-full.jpg" alt="Full landscape photo">
</picture> On narrow screens, a cropped version is shown. On wider screens, the full photo is displayed.
Combined: art direction + resolution switching
<picture>
<source
media="(max-width: 600px)"
srcset="photo-mobile-1x.jpg 1x,
photo-mobile-2x.jpg 2x"
>
<source
media="(min-width: 601px)"
srcset="photo-desktop-1x.jpg 1x,
photo-desktop-2x.jpg 2x"
>
<img src="photo-desktop-1x.jpg" alt="Landscape">
</picture> Detailed Table with Tag, attributes and attribute values
| Tag | Attribute | Values | Description |
|---|---|---|---|
<img> |
src |
URL | Image source (required) |
<img> |
alt |
text | Alternative text (required for accessibility) |
<img> |
width |
pixels | Display width |
<img> |
height |
pixels | Display height |
<img> |
loading |
eager, lazy |
Lazy loading behaviour |
<img> |
decoding |
sync, async, auto |
Decoding hint |
<img> |
srcset |
comma-separated list | Responsive image sources |
<img> |
sizes |
media query + size | Display size conditions |
<img> |
fetchpriority |
high, low, auto |
Loading priority |
<img> |
crossorigin |
anonymous, use-credentials |
CORS |
<figure> |
- | - | Container for media + caption |
<figcaption> |
- | text | Caption for the figure |
<picture> |
- | - | Container for multiple sources |
<source> |
srcset |
URL(s) | Image source for picture |
<source> |
media |
media query | When this source applies |
<source> |
type |
MIME type | Image format hint |
<source> |
sizes |
media query + size | Display size conditions |