← Chrome 147 reference

v147 · html · in developer trial

Lazy loading for video and audio elements

Adds the loading attribute to <video> and <audio> elements, letting browsers defer media resource loading until the element is near the viewport — the same mechanism already available for <img> and <iframe>.

In developer trial This feature is behind a flag in Chrome 147. Enable chrome://flags/#enable-experimental-web-platform-features to test it. The HTML spec pull request is still open; attribute semantics may change before shipping.

at a glance

Status in Chrome 147In developer trial (behind a flag)
Flagchrome://flags/#enable-experimental-web-platform-features
New attributeloading on <video> and <audio>
Valueseager (default) · lazy
Standards positionFirefox: Positive (implementation in progress)  ·  Safari: Support (implementation in progress)
SpecWHATWG HTML PR #11980
Chromium bugissues.chromium.org/issues/469111735
ChromeStatus5200068565139456 — Lazy loading for video and audio elements
Source: chromestatus.com feature 5200068565139456, May 2026.

why it exists

Since Chrome 76, <img loading="lazy"> and <iframe loading="lazy"> have let browsers skip fetching off-screen resources until the user scrolls close to them. The same pattern has never applied to <video> and <audio>, which start loading their source files as soon as the parser encounters them regardless of position on the page. Long-form pages with multiple embedded videos pay a large up-front network cost even when most users never scroll to those media elements. The loading attribute on media elements closes this gap and aligns behaviour across all embeddable resources.

Source: chromestatus summary and WHATWG HTML PR #11980, May 2026.

the attribute

Attributeloading
Elements<video>, <audio>
loading="eager"Default. Load the resource immediately, same as current behavior without the attribute.
loading="lazy"Defer resource loading until the element is within the browser's lazy-loading distance threshold from the viewport. The exact threshold is browser-defined and may vary by network conditions.

When loading="lazy" is set:

Network requestDeferred until the element enters the lazy-load intersection zone.
preload interactionA preload="none" hint continues to suppress loading. loading="lazy" takes effect only when the browser would otherwise begin fetching.
AutoplayAn element with autoplay and loading="lazy" will begin playing once loaded, which happens when it enters the threshold zone.
JavaScript .play()Calling .play() before the resource is loaded triggers an immediate load, overriding the lazy deferral.
Source: WHATWG HTML PR #11980 and chromestatus summary, May 2026.

example

Basic lazy video

<video loading="lazy" controls>
  <source src="feature-demo.mp4" type="video/mp4">
  <source src="feature-demo.webm" type="video/webm">
</video>

Lazy audio

<audio loading="lazy" controls>
  <source src="podcast-episode.mp3" type="audio/mpeg">
  <source src="podcast-episode.ogg" type="audio/ogg">
</audio>

Combining with preload

<!-- Best practice for a long page with many videos:
     lazy defers fetching; preload="metadata" limits initial load to just
     duration/dimensions once the element enters the threshold zone. -->
<video loading="lazy" preload="metadata" controls>
  <source src="explainer.mp4" type="video/mp4">
</video>

Detecting support

const supportsLazyMedia = 'loading' in HTMLVideoElement.prototype;
if (!supportsLazyMedia) {
  // Fall back to IntersectionObserver-based lazy loading
}
Source: WHATWG HTML PR #11980, May 2026.

browser support

BrowserSupport
Chrome 147In developer trial (behind flag)
Edge 147Tracking Chromium
FirefoxPositive — implementation in progress
SafariSupport — implementation in progress
Source: chromestatus browser views, May 2026. Firefox and Safari signals reference the WHATWG PR.

see also