Element.currentCSSZoom is a read-only instance property that reports the effective CSS zoom on an element—including zoom from parents. Learn how nested values multiply, why unrendered elements return 1, and how to scale client* / offset* sizes—with five examples and try-it labs.
01
Kind
Instance property
02
Access
Read-only
03
Type
Number (zoom factor)
04
Combines
Self + ancestors
05
Unrendered
Returns 1
06
Status
Baseline 2026
Fundamentals
Introduction
The CSS zoom property magnifies an element. When parents also set zoom, the visual scale stacks. currentCSSZoom answers: what is the total zoom factor affecting this element right now?
That number is useful when some layout APIs ignore zoom (for example clientHeight) while others include it (for example getBoundingClientRect()).
JavaScript
if ("currentCSSZoom" in Element.prototype) {
console.log(el.currentCSSZoom); // e.g. 6 for nested zoom:2 then zoom:3
}
💡
Beginner tip
Think: current = effective zoom after multiplying every zoom from the element up through its parents.
Concept
Understanding the Property
MDN: the currentCSSZoom read-only property of the Element interface provides the effective CSS zoom of an element, taking into account the zoom applied to the element and all its parent elements.
The value is calculated by multiplying the CSS zoom values of the element and all of its parents. For example, nested zooms of 2, 1.5, and 3 yield 9 on the deepest element. If the element does not have a CSS box (for example display: none on itself or an ancestor), currentCSSZoom is 1.
Read-only — change CSS zoom, then read again.
Number — effective zoom factor (usually ≥ 1 when zoomed in).
Feature-detect — older browsers may lack the property.
Baseline 2026 — newly available since March 2026 (MDN).
Foundation
📝 Syntax
JavaScript
currentCSSZoom
Value
A number: the effective CSS zoom on the element, or 1 if it is not rendered.
Item
Detail
Type
number
Access
Read-only
Includes
Own zoom × ancestor zooms
Unrendered
Always 1
⚠️
Zoom-aware vs zoom-blind APIs
getBoundingClientRect() includes CSS zoom. Properties like clientHeight, offsetWidth, and methods like scroll() do not. Scale with currentCSSZoom when you mix them.
Pattern
📋 MDN Nested Zoom Example
MDN nests zoom: 2 then zoom: 3. The deepest rendered child sees an effective zoom of 6:
Element.currentCSSZoom is Baseline 2026 newly available (MDN: across latest browsers since March 2026). Feature-detect on older engines. Logos use the shared browser-image-sprite.png sprite from this project.
✓ Baseline 2026
Element.currentCSSZoom
Read-only number — effective CSS zoom (self × ancestors), or 1 if not rendered.
BaselineNewly available 2026
Google Chrome128+ — feature-detect older
Yes
Microsoft Edge128+ — feature-detect older
Yes
Mozilla Firefox126+ — feature-detect older
Yes
Apple Safari26.4+ — feature-detect older
Yes
Opera114+ (Chromium) — feature-detect older
Yes
Internet ExplorerNot supported
No
currentCSSZoomBaseline
Bottom line: Use currentCSSZoom for effective CSS zoom. Nested zooms multiply. Unrendered elements return 1. Feature-detect before production use on older browsers.
Wrap Up
Conclusion
currentCSSZoom reports the effective CSS zoom after multiplying the element and its ancestors. Remember unrendered boxes return 1, feature-detect on older browsers, and use the value to scale zoom-blind layout measurements when needed.
It returns the effective CSS zoom for the element: the product of its own zoom and every ancestor's zoom.
No. MDN marks Element.currentCSSZoom as Baseline 2026 (newly available since March 2026). It is not Deprecated, Experimental, or Non-standard. Still feature-detect on older browsers.
No. It is a read-only instance property. Change zoom with CSS (or style.zoom), then read currentCSSZoom again.
They multiply. If a parent has zoom: 2 and a child has zoom: 3, the child's currentCSSZoom is 6.
If the element (or an ancestor) has no CSS box—for example display: none—currentCSSZoom is 1.
Those APIs ignore CSS zoom. Multiply (or divide) by currentCSSZoom when you need to reconcile them with viewport-relative sizes like getBoundingClientRect().
Did you know?
In MDN’s demo, a child with no local zoom can still report currentCSSZoom: 6 because parents already multiplied to that factor—effective zoom is inherited through the tree when the element is rendered.