ResizeObserver works in Chrome 64+, Edge 79+, Firefox 69+, Safari 13.1+ macOS, Safari 13.4+ iOS, Opera 52+, and Samsung Internet 9.2+. IE has no support.

Prince Dewani
May 5, 2026
ResizeObserver is a W3C JavaScript API that reports changes to an element's content box, border box, or device-pixel content box. It works in Chrome 64+, Edge 79+, Firefox 69+, Safari 13.1+ on macOS, Safari 13.4+ on iOS, Opera 52+, and Samsung Internet 9.2+, while Internet Explorer never supported it.
This guide covers what ResizeObserver is, the browsers that support it, the key features, the common use cases, how to check browser support, and the known issues.
ResizeObserver is a JavaScript interface that reports changes to a DOM element's content box, border box, or device-pixel content box. The W3C CSS Working Group edits the spec, and pages access the API through the global ResizeObserver constructor and its observe, unobserve, and disconnect methods.
ResizeObserver is available in every modern browser, with global browser support of about 96%. Internet Explorer is the only major browser that never added it, and Opera Mini still has no support either.
Chrome supports ResizeObserver from Chrome 64 on Windows, macOS, Linux, ChromeOS, and Android. Chrome 54 to 63 had ResizeObserver disabled by default behind the chrome://flags/#enable-experimental-web-platform-features flag, and Chrome 4 to 53 did not support it at all. Every Chrome channel ships the API today, including the Chrome WebView used by Android apps.
Microsoft Edge supports ResizeObserver from Edge 79 on Windows, macOS, Linux, and Android. Edge 79 was the first Chromium-based release, so the API mirrors Chrome from that version on. The legacy EdgeHTML versions 12 to 18 never added ResizeObserver, and Internet Explorer never had it either.
Firefox supports ResizeObserver from Firefox 69 on Windows, macOS, Linux, and Android. Firefox 2 to 68 did not support the API and offered no about:config preference to enable it. Firefox for Android tracks the desktop release train, so Android Firefox 79 and later includes ResizeObserver as well.
Safari supports ResizeObserver from Safari 13.1 on macOS and from Safari 13.4 on iOS and iPadOS. Safari 13 had ResizeObserver disabled by default, while Safari 3.1 to 12.1 on macOS and Safari 3.2 to 13.3 on iOS did not support it at all. Every Safari release after 13.4 ships the API by default, including Safari on visionOS.
Opera supports ResizeObserver from Opera 52 on Windows, macOS, Linux, and ChromeOS. Opera 41 to 51 had ResizeObserver disabled by default behind a flag, and Opera 9 to 40 did not support it. Opera Mobile picked up the API from Opera Mobile 80, while Opera Mini does not expose ResizeObserver in any version.
Samsung Internet supports ResizeObserver from Samsung Internet 9.2 on Galaxy phones and tablets. Older Samsung Internet 4 to 9.0 builds did not include the API. Every Galaxy device shipping with Android 9 or later runs a Samsung Internet release that supports ResizeObserver out of the box.
Chrome for Android, Firefox for Android, and the WebView component used by Android apps all support ResizeObserver from their Chromium 64 and Firefox 69 base versions on. The legacy stock Android Browser on Android 4.4 and earlier did not support ResizeObserver, and that browser is no longer shipped.
Internet Explorer 6 to 11 do not support ResizeObserver in any version. Microsoft has retired Internet Explorer, and the modern replacement is Chromium-based Edge, which exposes ResizeObserver from Edge 79. Web apps that still target IE need a polyfill such as juggle/resize-observer.
Note: ResizeObserver behaves differently across older Safari and mobile browsers. Test it on real browsers and OS with TestMu AI. Try TestMu AI free!
ResizeObserver gives a page a callback every time an element's box changes size, with measurements that match the CSS box model rather than the viewport. The API surface is small and follows the same pattern as MutationObserver and IntersectionObserver.
ResizeObserver shines anywhere a layout has to react to a container's size rather than the viewport's size. Production code uses it for responsive components, scroll preservation, canvas resizing, and runtime layout switches.
You check ResizeObserver support by feature-testing the global constructor before you call it. The check works on any page and takes about thirty seconds in DevTools.
The same logic fits into a script tag for production. Paste this snippet into the DevTools console of Chrome, Firefox, Safari, or Edge to confirm support and watch live size updates.
// Paste this into the DevTools console to confirm ResizeObserver support
// and watch the .card element react to size changes.
if ("ResizeObserver" in window) {
console.log("ResizeObserver is available.");
const card = document.querySelector(".card") || document.body;
const observer = new ResizeObserver((entries) => {
for (const entry of entries) {
const { inlineSize, blockSize } = entry.contentBoxSize[0];
console.log("card size", Math.round(inlineSize), "x", Math.round(blockSize));
}
});
observer.observe(card);
} else {
console.log("ResizeObserver is not supported. Fall back to window.resize.");
}ResizeObserver has the same coverage gap as most web APIs that arrived after Chrome 64, plus one signature pitfall: the observer callback can trigger another size change that wakes the same callback. Plan around the loop and the test-environment gaps.
In my experience, the loop error during Cypress runs is the trickiest one to silence. The fix that has stuck is wrapping every page mutation that lives inside a ResizeObserver callback in requestAnimationFrame, then ignoring the harmless warning in the cypress.config event hook.
All ResizeObserver 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