Living Standard — Last Updated 29 October 2025
picture elementSupport in all current engines.
HTML element. It doesn't implement specific properties or methods.">HTMLPictureElement
Support in all current engines.
source elements, followed by one img element,
optionally intermixed with script-supporting elements.[Exposed =Window ]
interface HTMLPictureElement : HTMLElement {
[HTMLConstructor ] constructor ();
};
The picture element is a container
which provides multiple sources to its contained img element
to allow authors to declaratively control or give hints to the user agent about which image resource to use,
based on the screen pixel density, viewport size, image format, and other factors.
It represents its children.
The picture element is somewhat different from the similar-looking
video and audio elements. While all of them contain source
elements, the source element's src attribute
has no meaning when the element is nested within a picture element, and the resource
selection algorithm is different. Also, the picture element itself does not display
anything; it merely provides a context for its contained img element that enables it
to choose from multiple URLs.
source element HTML element specifies multiple media resources for the
Support in all current engines.
Support in all current engines.
picture element, before the img element.track elements.type — Type of embedded resource
media — Applicable media
src (in audio or video) — Address of the resource
srcset (in picture) — Images to use in different situations, e.g., high-resolution displays, small monitors, etc.
sizes (in picture) — Image sizes for different page layouts
width (in picture) — Horizontal dimension
height (in picture) — Vertical dimension
[Exposed =Window ]
interface HTMLSourceElement : HTMLElement {
[HTMLConstructor ] constructor ();
[CEReactions , ReflectURL ] attribute USVString src ;
[CEReactions , Reflect ] attribute DOMString type ;
[CEReactions , Reflect ] attribute USVString srcset ;
[CEReactions , Reflect ] attribute DOMString sizes ;
[CEReactions , Reflect ] attribute DOMString media ;
[CEReactions , Reflect ] attribute unsigned long width ;
[CEReactions , Reflect ] attribute unsigned long height ;
};
The source element allows authors to specify multiple alternative
source sets for img elements or multiple alternative
media resources for media
elements. It does not represent anything on its own.
The type attribute
may be present. If present, the value must be a valid MIME type string.
The media
attribute may also be present. If present, the value must contain a valid media query
list. The user agent will skip to the next source element if the value does
not match the environment.
The media attribute is only evaluated
once during the resource selection algorithm
for media elements. In contrast, when using the
picture element, the user agent will react to
changes in the environment.
The remainder of the requirements depend on whether the parent is a picture
element or a media element:
source element's parent is a picture elementThe srcset
attribute must be present, and is a srcset attribute.
The srcset attribute contributes the image sources to the source set, if the
source element is selected.
If the srcset attribute has any image candidate strings using a width descriptor, the
sizes attribute may also be present. If, additionally,
the following sibling img element does not allow
auto-sizes, the sizes attribute must be present.
The sizes
attribute is a sizes attribute, which contributes the source size to
the source set, if the source element is selected.
If the img element allows auto-sizes, then the sizes attribute can be omitted on previous sibling
source elements. In such cases, it is equivalent to specifying auto.
The source element supports dimension attributes. The
img element can use the width and height attributes of a source element, instead of
those on the img element itself, to determine its rendered dimensions and
aspect-ratio, as defined in the Rendering section.
The type attribute gives the type of the images in the
source set, to allow the user agent to skip to the next source element
if it does not support the given type.
If the type attribute is not
specified, the user agent will not select a different source element if it finds
that it does not support the image format after fetching it.
When a source element has a following sibling source element or
img element with a srcset attribute
specified, it must have at least one of the following:
A media attribute specified with a value that,
after stripping leading and trailing
ASCII whitespace, is not the empty string and is not an ASCII
case-insensitive match for the string "all".
A type attribute specified.
The src attribute must not be present.
source element's parent is a media elementThe src attribute
gives the URL of the media resource. The value must be a valid
non-empty URL potentially surrounded by spaces. This attribute must be present.
The type attribute gives the type of the media
resource, to help the user agent determine if it can play this media
resource before fetching it. The codecs parameter, which certain
MIME types define, might be necessary to specify exactly how the resource is encoded.
[RFC6381]
Dynamically modifying a source element's src or type attribute
when the element is already inserted in a video or audio element will
have no effect. To change what is playing, just use the src
attribute on the media element directly, possibly making use of the canPlayType() method to pick from amongst available
resources. Generally, manipulating source elements manually after the document has
been parsed is an unnecessarily complicated approach.
The following list shows some examples of how to use the codecs= MIME
parameter in the type attribute.
< source src = 'video.mp4' type = 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"' > < source src = 'video.mp4' type = 'video/mp4; codecs="avc1.58A01E, mp4a.40.2"' > < source src = 'video.mp4' type = 'video/mp4; codecs="avc1.4D401E, mp4a.40.2"' > < source src = 'video.mp4' type = 'video/mp4; codecs="avc1.64001E, mp4a.40.2"' > < source src = 'video.mp4' type = 'video/mp4; codecs="mp4v.20.8, mp4a.40.2"' > < source src = 'video.mp4' type = 'video/mp4; codecs="mp4v.20.240, mp4a.40.2"' > < source src = 'video.3gp' type = 'video/3gpp; codecs="mp4v.20.8, samr"' > < source src = 'video.ogv' type = 'video/ogg; codecs="theora, vorbis"' > < source src = 'video.ogv' type = 'video/ogg; codecs="theora, speex"' > < source src = 'audio.ogg' type = 'audio/ogg; codecs=vorbis' > < source src = 'audio.spx' type = 'audio/ogg; codecs=speex' > < source src = 'audio.oga' type = 'audio/ogg; codecs=flac' > < source src = 'video.ogv' type = 'video/ogg; codecs="dirac, vorbis"' > The source HTML element insertion steps, given
insertedNode, are:
Let parent be insertedNode's parent.
If parent is a media element that has no src attribute and whose networkState has the value NETWORK_EMPTY, then invoke that media
element's resource selection
algorithm.
If parent is a picture element, then for each child of parent's children, if child is an img element,
then count this as a relevant mutation for
child.
The source HTML element moving steps, given movedNode and
oldParent, are:
If oldParent is a picture element, then for each child of oldParent's children, if child is an img element,
then count this as a relevant mutation for
child.
The source HTML element removing steps, given removedNode
and oldParent, are:
If oldParent is a picture element, then for each child of oldParent's children, if child is an img element,
then count this as a relevant mutation for
child.
If the author isn't sure if user agents will all be able to render the media resources
provided, the author can listen to the error event on the last
source element and trigger fallback behavior:
< script >
function fallback( video) {
// replace <video> with its contents
while ( video. hasChildNodes()) {
if ( video. firstChild instanceof HTMLSourceElement)
video. removeChild( video. firstChild);
else
video. parentNode. insertBefore( video. firstChild, video);
}
video. parentNode. removeChild( video);
}
</ script >
< video controls autoplay >
< source src = 'video.mp4' type = 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"' >
< source src = 'video.ogv' type = 'video/ogg; codecs="theora, vorbis"'
onerror = "fallback(parentNode)" >
...
</ video >
img elementHTML element embeds an image into the document.">Element/img
Support in all current engines.
element, providing the properties and methods used to manipulate image elements.">HTMLImageElement
Support in all current engines.
element is not loaded.">HTMLImageElement/alt
Support in all current engines.
Support in all current engines.
Support in all current engines.
Support in all current engines.
element.">HTMLImageElement/isMap
Support in all current engines.
usemap attribute: Interactive content.picture element, after all source elements.alt — Replacement text for use when images are not available
src — Address of the resource
srcset — Images to use in different situations, e.g., high-resolution displays, small monitors, etc.
sizes — Image sizes for different page layouts
crossorigin — How the element handles crossorigin requests
usemap — Name of image map to use
ismap — Whether the image is a server-side image map
width — Horizontal dimension
height — Vertical dimension
referrerpolicy — Referrer policy for fetches initiated by the element
decoding — Decoding hint to use when processing this image for presentation
loading — Used when determining loading deferral
fetchpriority — Sets the priority for fetches initiated by the element
alt attribute: for authors; for implementers.[Exposed =Window ,
LegacyFactoryFunction =Image (optional unsigned long width , optional unsigned long height )]
interface HTMLImageElement : HTMLElement {
[HTMLConstructor ] constructor ();
[CEReactions , Reflect ] attribute DOMString alt ;
[CEReactions , ReflectURL ] attribute USVString src ;
[CEReactions , Reflect ] attribute USVString srcset ;
[CEReactions , Reflect ] attribute DOMString sizes ;
[CEReactions ] attribute DOMString ? crossOrigin ;
[CEReactions , Reflect ] attribute DOMString useMap ;
[CEReactions , Reflect ] attribute boolean isMap ;
[CEReactions , ReflectSetter ] attribute unsigned long width ;
[CEReactions , ReflectSetter ] attribute unsigned long height ;
readonly attribute unsigned long naturalWidth ;
readonly attribute unsigned long naturalHeight ;
readonly attribute boolean complete ;
readonly attribute USVString currentSrc ;
[CEReactions ] attribute DOMString referrerPolicy ;
[CEReactions ] attribute DOMString decoding ;
[CEReactions ] attribute DOMString loading ;
[CEReactions ] attribute DOMString fetchPriority ;
Promise <undefined > decode ();
// also has obsolete members
};
An img element represents an image.
An img element has a dimension
attribute source, initially set to the element itself.
element.">HTMLImageElement/src
Support in all current engines.
HTML element embeds an image into the document.">Element/img#attr-srcset
Support in all current engines.
The image given by the src
and srcset attributes, and
any previous sibling source elements' srcset
attributes if the parent is a picture element, is the embedded content; the value of
the alt attribute provides
equivalent content for those who cannot process images or who have image loading disabled (i.e.,
it is the img element's fallback content).
The requirements on the alt attribute's value are described
in a separate section.
At least one of the src and srcset attributes must be present.
If the src attribute is present, it must contain a
valid non-empty URL potentially surrounded by spaces referencing a non-interactive,
optionally animated, image resource that is neither paged nor scripted.
The requirements above imply that images can be static bitmaps (e.g. PNGs, GIFs, JPEGs), single-page vector documents (single-page PDFs, XML files with an SVG document element), animated bitmaps (APNGs, animated GIFs), animated vector graphics (XML files with an SVG document element that use declarative SMIL animation), and so forth. However, these definitions preclude SVG files with script, multipage PDF files, interactive MNG files, HTML documents, plain text documents, and the like. [PNG] [GIF] [JPEG] [PDF] [XML] [APNG] [SVG] [MNG]
The srcset attribute is a srcset
attribute.
The srcset attribute and the src attribute (if width
descriptors are not used) contribute the image sources
to the source set (if no source element was selected).
If the srcset attribute is present and has any image candidate strings using a width
descriptor, the sizes attribute must also be present.
If the srcset attribute is not specified, and the
loading attribute is in the Lazy state, the sizes attribute may be specified with the value "auto" (ASCII case-insensitive). The sizes attribute is a sizes attribute,
which contributes the source size to the source set (if no
source element was selected).
An img element allows auto-sizes if:
loading attribute is in the Lazy state, andsizes attribute's value is "auto" (ASCII case-insensitive), or starts with "auto," (ASCII case-insensitive).