Testing

CSS Zoom: Browser Support, Values, Known Issues

CSS Zoom supports Chrome 4+, Edge 12+, Firefox 126+, Safari 4+, Opera 15+, Samsung Internet 4+, and IE 5.5 to 11. See full browser support details.

Author

Prince Dewani

May 2, 2026

CSS Zoom is a CSS property that scales an element and its child elements while affecting page layout, defined by Microsoft for Internet Explorer and now drafted by the W3C. It works in Chrome 4+, Edge 12+, Firefox 126+, Safari 4+, Opera 15+, Samsung Internet 4+, and IE 5.5 to 11; older Firefox before 126 ignored it.

This guide covers what CSS Zoom is, browser support, accepted values, the difference from transform: scale, a hover-zoom recipe, and known issues.

What is CSS Zoom?

CSS Zoom is a CSS property that scales the rendered size of an element and every descendant. Unlike transform: scale, it changes the layout box, so siblings reflow around the new size. The W3C CSS Working Group is standardizing the property in the CSS Viewport Editor's Draft.

Which browsers does CSS Zoom support?

CSS Zoom now ships in every major engine. The Web Platform Baseline marks the property as newly available across Chromium, WebKit, and Gecko engines after Firefox finally added it.

Loading browser compatibility data...

CSS Zoom compatibility in Chrome

Chrome supports CSS Zoom from Chrome 4 on Windows, macOS, Linux, ChromeOS, and Android. Chrome 126 shipped the standardized layout-affecting behavior aligned with the W3C draft, while older Chrome builds used the original Microsoft semantics that did not always trigger reflow on dynamic value changes.

CSS Zoom compatibility in Edge

Microsoft Edge supports CSS Zoom from Edge 12 on Windows and macOS through the same Chromium pipeline as Chrome. Internet Explorer mode inside Edge also keeps the legacy IE 11 zoom behavior alive for older intranet apps that still depend on the hasLayout fix.

CSS Zoom compatibility in Firefox

Firefox supports CSS Zoom from Firefox 126 on Windows, macOS, Linux, and Android by default. Firefox 2 to 125 parsed and discarded the property, so any pre-126 fallback needs transform: scale() instead of zoom.

CSS Zoom compatibility in Safari

Safari supports CSS Zoom from Safari 4 on macOS, iOS, iPadOS, and visionOS. Safari 3.1 and 3.2 did not parse the property at all. Safari also accepts the non-standard zoom: reset keyword, which prevents user pinch-zoom from scaling the element further on the original WebKit path.

CSS Zoom compatibility in Opera

Opera supports CSS Zoom from Opera 15 on Windows, macOS, and Linux through the Blink engine. Opera 9 to 12.1 on the older Presto engine did not support the property, and Opera Mobile picked up support from Opera Mobile 80 on Android.

CSS Zoom compatibility in Samsung Internet

Samsung Internet supports CSS Zoom from Samsung Internet 4 on Galaxy phones and tablets through its Chromium base. Every modern Samsung Internet release parses both the number and percentage forms of the value without a flag.

CSS Zoom compatibility in Android Browser

The legacy stock Android Browser supports CSS Zoom from Android 2.1 through Android 4.4.4. On modern Android phones, use Chrome for Android or Samsung Internet, both of which inherit the full Chromium support, so the legacy browser's quirks are no longer a concern.

CSS Zoom compatibility in Internet Explorer

Internet Explorer 5.5 through Internet Explorer 11 fully support CSS Zoom; the property started life as a Microsoft extension in IE 5.5 and powered the famous hasLayout layout fix. Microsoft has retired Internet Explorer, so move new work to Edge or Edge IE Mode for any legacy intranet pages.

Note

Note: CSS Zoom behaves differently across Firefox before 126, modern Chromium, and WebKit builds. Test it on real browsers and OS with TestMu AI. Try TestMu AI free!

What values does CSS Zoom accept?

CSS Zoom accepts numbers, percentages, and a couple of non-standard keywords, all clamped to zero or higher. The W3C draft formalizes the number and percentage paths, while the keywords stay browser-specific.

  • Number: A unitless multiplier where 1 means normal, 1.5 zooms in by 150 percent, and 0.5 zooms out by 50 percent. Negative values are invalid and the browser falls back to 1.
  • Percentage: Same effect as the number form but written with a percent sign, where 100% equals 1 and 200% doubles the size. Authors who think in percentages prefer this syntax.
  • normal keyword: Resets zoom to 1 and is non-standard. Modern code should use unset, initial, or a fresh number value instead of relying on the keyword.
  • reset keyword (Safari only): Cancels any user pinch-zoom on the element. Other engines ignore it, so do not rely on it outside Safari on macOS or iOS.
  • Global keywords: inherit, initial, revert, revert-layer, and unset all work. CSS Zoom is not inherited by default, so the inherit keyword is the only way to opt a child element into the parent's value.

What is the difference between CSS Zoom and transform: scale()?

Both properties scale the visible size of an element, but they take different rendering paths. The choice changes how the page reflows, how scrollbars react, and how surrounding content moves on every frame.

DimensionCSS Zoomtransform: scale()
Layout impactAffects layout; surrounding content reflows around the new sizeNo layout impact; siblings keep their original positions
ScrollbarsThe scaled element pushes scrollbars when it grows past its containerScrollbars stay tied to the original box; scaled overflow is ignored
PerformanceTriggers reflow and repaint on the main threadHardware-accelerated; repaints on the GPU compositor layer
AnimatabilityNot animatable; transitions and keyframes cannot interpolate zoomFully animatable through transition: transform and CSS keyframes
Click and hit-testingClick coordinates work against the new layout boxClick targets stay on the unscaled box, which can confuse pointer events
Browser support floorChrome 4+, Edge 12+, Firefox 126+, Safari 4+, IE 5.5+Universal in every modern browser since the CSS3 transforms era
Best forPrint previews, embedded preview panes, IE intranet appsHover effects, modal pop-ins, animations, GPU-friendly motion

How do you use CSS Zoom for a hover effect?

A common production use is enlarging an image when the user hovers it. The recipe uses CSS Zoom on hover plus a clipping container so the zoomed image stays inside its slot.

  • Wrap the image: Place the img tag inside a container with overflow: hidden so the zoomed image stays clipped to its slot when it grows.
  • Set the base styles: Apply width: 100% and display: block on the image so it fills the container at zoom: 1 with no inline-element gaps.
  • Apply the hover zoom: Set zoom: 1.2 inside the img:hover rule to enlarge the image by 20 percent on pointer-over.
  • Add a cursor cue: Set cursor: zoom-in on the container so the user knows the element responds to hover before they trigger it.
  • Test in Firefox 126: Older Firefox builds ignore the property; verify the recipe in Firefox 126 or later, or use transform: scale(1.2) as a fallback inside @supports not (zoom: 1).
.zoom-on-hover {
    overflow: hidden;
    cursor: zoom-in;
}

.zoom-on-hover img {
    width: 100%;
    display: block;
}

.zoom-on-hover img:hover {
    zoom: 1.2;
}

If a smooth animation matters more than layout reflow, swap zoom: 1.2 for transform: scale(1.2) and add transition: transform 0.3s ease. CSS Zoom is not animatable, so the change always snaps instantly on hover.

...

What are the known issues with CSS Zoom?

CSS Zoom carries the bruises of its non-standard origin, and even after the W3C draft formalized the behavior, several rough edges remain in production code.

  • Pre-126 Firefox is a hard miss: Any browser report from Firefox 125 or earlier shows zero scaling at all; the property is parsed and discarded, which silently breaks Firefox-only branches.
  • Not animatable: Browsers do not interpolate zoom over a transition or animation, so smooth scale-ups need transform: scale() instead of zoom.
  • Subpixel rounding artifacts: Zoomed text and images can blur on values like zoom: 1.07 because every painted pixel rounds against the device-pixel grid.
  • Layout math drifts from getBoundingClientRect: getBoundingClientRect already includes zoom, but offsetHeight and clientHeight do not, which breaks JavaScript layout code; use Element.currentCSSZoom to reconcile the two.
  • Scroll containers can clip surprisingly: Zooming an element past its parent height in an overflow: auto container can hide scrollbars on iOS Safari until the user taps inside the box.
  • zoom: reset is not portable: Other engines treat reset as an invalid value, so feature-detect with CSS.supports("zoom: reset") before relying on it outside Safari.
  • Print stylesheets often misbehave: Some print drivers double-apply zoom and the page-to-paper math, so rendered margins shrink by an extra factor on Chrome's print preview.

In my experience, the most common CSS Zoom bug in cross-browser QA is shipping a zoom: 0.95 down-scale on a desktop dashboard and watching Firefox 125 users report that nothing scales at all; always pair the property with a transform: scale() fallback inside @supports not (zoom: 1).

...

Citations

All CSS Zoom version numbers and platform notes in this guide come from these primary sources:

Author

Prince Dewani is a Community Contributor at TestMu AI, where he manages content strategies around software testing, QA, and test automation. He is certified in Selenium, Cypress, Playwright, Appium, Automation Testing, and KaneAI. Prince has also presented academic research at the international conference PBCON-01. He further specializes in on-page SEO, bridging marketing with core testing technologies. On LinkedIn, he is followed by 4,300+ QA engineers, developers, DevOps experts, tech leaders, and AI-focused practitioners in the global testing community.

Open in ChatGPT Icon

Open in ChatGPT

Open in Claude Icon

Open in Claude

Open in Perplexity Icon

Open in Perplexity

Open in Grok Icon

Open in Grok

Open in Gemini AI Icon

Open in Gemini AI

Copied to Clipboard!
...

3000+ Browsers. One Platform.

See exactly how your site performs everywhere.

Try it free
...

Write Tests in Plain English with KaneAI

Create, debug, and evolve tests using natural language.

Try for free

Frequently asked questions

Did you find this page helpful?

More Related Hubs

TestMu AI forEnterprise

Get access to solutions built on Enterprise
grade security, privacy, & compliance

  • Advanced access controls
  • Advanced data retention rules
  • Advanced Local Testing
  • Premium Support options
  • Early access to beta features
  • Private Slack Channel
  • Unlimited Manual Accessibility DevTools Tests