How to detect page zoom level in all modern browsers?

后端 未结 28 1773
慢半拍i
慢半拍i 2020-11-21 05:27
  1. How can I detect the page zoom level in all modern browsers? While this thread tells how to do it in IE7 and IE8, I can\'t find a good cross-browser solution.

28条回答
  •  野性不改
    2020-11-21 06:06

    Now it's an even bigger mess than it was when this question was first asked. From reading all the responses and blog posts I could find, here's a summary. I also set up this page to test all these methods of measuring the zoom level.

    Edit (2011-12-12): I've added a project that can be cloned: https://github.com/tombigel/detect-zoom

    • IE8: screen.deviceXDPI / screen.logicalXDPI (or, for the zoom level relative to default zoom, screen.systemXDPI / screen.logicalXDPI)
    • IE7: var body = document.body,r = body.getBoundingClientRect(); return (r.left-r.right)/body.offsetWidth; (thanks to this example or this answer)
    • FF3.5 ONLY: screen.width / media query screen width (see below) (takes advantage of the fact that screen.width uses device pixels but MQ width uses CSS pixels--thanks to Quirksmode widths)
    • FF3.6: no known method
    • FF4+: media queries binary search (see below)
    • WebKit: https://www.chromestatus.com/feature/5737866978131968 (thanks to Teo in the comments)
    • WebKit: measure the preferred size of a div with -webkit-text-size-adjust:none.
    • WebKit: (broken since r72591) document.width / jQuery(document).width() (thanks to Dirk van Oosterbosch above). To get ratio in terms of device pixels (instead of relative to default zoom), multiply by window.devicePixelRatio.
    • Old WebKit? (unverified): parseInt(getComputedStyle(document.documentElement,null).width) / document.documentElement.clientWidth (from this answer)
    • Opera: document.documentElement.offsetWidth / width of a position:fixed; width:100% div. from here (Quirksmode's widths table says it's a bug; innerWidth should be CSS px). We use the position:fixed element to get the width of the viewport including the space where the scrollbars are; document.documentElement.clientWidth excludes this width. This is broken since sometime in 2011; I know no way to get the zoom level in Opera anymore.
    • Other: Flash solution from Sebastian
    • Unreliable: listen to mouse events and measure change in screenX / change in clientX

    Here's a binary search for Firefox 4, since I don't know of any variable where it is exposed:

    
    
    Dummy element to test media queries.

提交回复
热议问题