loading=lazy works in Chrome 77+, Edge 79+, Firefox 121+, Safari 16.4+, Opera 64+, and Samsung Internet 12+. Learn the syntax and the known issues.

Prince Dewani
May 1, 2026
The HTML loading attribute is a WHATWG hint on img and iframe elements that tells the browser when to fetch the resource, and loading=lazy defers the fetch until the element nears the viewport. It works by default in Chrome 77+, Edge 79+, Firefox 121+, Safari 16.4+ on macOS and iOS, Opera 64+, and Samsung Internet 12+, while Internet Explorer never supported it.
This guide covers what loading=lazy is, the browsers that support it, the syntax, how it works, how to feature-detect it, and the known issues.
loading=lazy is a value of the HTML loading attribute, defined in the WHATWG HTML Standard for img and iframe elements. It tells the browser to defer the network fetch until the element is within a calculated distance of the viewport. The other accepted value is eager, which is the browser default.
Every modern desktop and mobile browser supports loading=lazy by default on img elements, and recent versions add the same support for iframes. Internet Explorer and the legacy Android Browser never shipped support.
Chrome supports loading=lazy by default from Chrome 77 on Windows, macOS, Linux, ChromeOS, and Android, for both img and iframe elements. Chrome 75 to 76 had the attribute behind the chrome://flags/#enable-lazy-image-loading flag and was disabled by default. Chrome 4 to 74 did not support the attribute at all and ignored it as an unknown HTML hint.
Microsoft Edge supports loading=lazy by default from Edge 79 on Windows, macOS, and Linux, on the Chromium engine. Legacy EdgeHTML 12 to 18 did not support the attribute, since the parser predated the WHATWG addition. Chromium-based Edge inherits the same Chrome behavior on every release going forward.
Firefox supports loading=lazy on img elements from Firefox 75 on Windows, macOS, Linux, and Android. Firefox added iframe support from Firefox 121, so cross-browser iframe lazy loading needs Firefox 121 or later. Firefox 2 to 74 did not support the attribute, and the older Gecko parser ignored it without warning.
Safari supports loading=lazy by default from Safari 16.4 on macOS Ventura and from Safari 16.4 on iOS 16.4 and iPadOS 16.4. Safari 15.5 to 16.3 had partial support that lazy-loaded images only after a scroll event, which made the attribute unreliable on long pages and slow networks. Safari 3.2 to 15.4 did not support the attribute.
Opera supports loading=lazy by default from Opera 64 on Windows, macOS, and Linux. Opera 62 to 63 had the attribute behind the same Chromium experimental flag and was disabled by default. Opera Mobile supports loading=lazy from Opera Mobile 80 on Android, and earlier Opera Mobile builds ignored the attribute.
Samsung Internet supports loading=lazy by default from Samsung Internet 12 on Galaxy phones and tablets. The browser shares the underlying Chromium engine with Chrome on Android, so it picks up viewport-threshold tweaks the same way Chrome does. Samsung Internet 4 to 11.1 did not support the attribute on the older Chromium base.
Chrome for Android supports loading=lazy from Chrome 77, and the modern Android WebView inherits the same Chromium behavior. The legacy Android Browser on KitKat and earlier did not support the attribute and never received a backport. Apps that embed a WebView pick up the feature once the device updates the system WebView component.
Internet Explorer 6 through 11 do not support loading=lazy. The Trident parser drops the attribute as unknown markup and fetches every img and iframe immediately during the initial parse. Microsoft has retired Internet Explorer, so users on Windows who need lazy loading should switch to Microsoft Edge 79 or later.
Note: loading=lazy behaves differently across Safari, Firefox iframe support, and older Android WebView builds. Test it on real browsers and OS with TestMu AI. Try TestMu AI free!
The loading attribute lives directly on img and iframe elements and accepts two keyword values. It pairs cleanly with the width, height, and decoding attributes that browsers use to reserve layout space and pick a decode strategy.
When the browser parses an img or iframe with loading=lazy, it skips the immediate network fetch and queues the element for an internal IntersectionObserver. The fetch fires only once the element comes within the viewport threshold, at which point the browser drops the attribute hint and treats the request as a normal eager load.
Run the property check loading in HTMLImageElement.prototype in JavaScript. The expression returns true on every browser that supports loading=lazy on img, and false on browsers that need a polyfill.
// Detect native loading="lazy" support before you upgrade your image markup
if ('loading' in HTMLImageElement.prototype) {
document.querySelectorAll('img[data-lazy-src]').forEach((img) => {
img.loading = 'lazy';
img.src = img.dataset.lazySrc;
});
console.log('Native loading="lazy" is supported on this browser');
} else {
// Fall back to an IntersectionObserver-based polyfill on older browsers
import('./lazy-load-polyfill.js').then(({ observe }) => observe('img[data-lazy-src]'));
console.log('Native lazy loading is not supported, polyfill loaded');
}For iframe support, swap HTMLImageElement for HTMLIFrameElement. The two properties report independently because Firefox shipped the img attribute long before the iframe attribute, and a feature-detect that only checks the img path will report a false positive on Firefox 75 to 120 for iframes.
loading=lazy ships in every modern browser, but the way each engine measures the viewport threshold, handles hidden carousels, and treats the LCP image still trips up production sites.
All loading=lazy version numbers and platform notes in this guide come from these primary sources:
Did you find this page helpful?
More Related Hubs
TestMu AI forEnterprise
Get access to solutions built on Enterprise
grade security, privacy, & compliance