Fingerprinting · 5 min read

Your Screen Size and Resolution Are a Tracking Signal

20 Jul 2026 By Michelle Johnson

Screen and window dimensions look mundane, but a handful of measurements together narrow you down sharply. Here is what a page reads from your display.

On this page
  1. What a page can measure
  2. The numbers that betray a maximised window
  3. Pixel density
  4. Colour depth
  5. A preference that became a signal
  6. What this means in practice
  7. Reading your own numbers

A page can read the size of your screen, the size of the window inside it, and the density of the pixels between them, and it can do all of that without asking permission and without you noticing.

Ask someone what a website can learn about their computer and they will usually mention files or cookies. Almost nobody mentions the rectangle of glass in front of them. Yet the size of your screen, the size of your browser window, and the density of the pixels inside it are among the most stable facts a page can collect — they do not change between visits, they require no permission, and they are different for almost everyone.

What a page can measure

A small set of values, all available from ordinary JavaScript, describes your display and your window.

  • screen.width and screen.height give the full panel resolution in CSS pixels.
  • screen.availWidth and screen.availHeight give the usable area, after subtracting things like a dock or a taskbar.
  • window.innerWidth and window.innerHeight describe the viewport — the area a page actually renders into.
  • window.outerWidth and window.outerHeight describe the whole browser window, chrome included.
  • screen.colorDepth reports how many bits are used per pixel, usually 24.
  • devicePixelRatio relates CSS pixels to physical pixels.

Individually, each is unremarkable. Nobody is identified by owning a 1920 by 1080 monitor. But the combination is far more specific than the parts, which is the recurring theme of browser fingerprinting: many ordinary values multiplied together produce a rare result.

The numbers that betray a maximised window

The most revealing of these is the viewport, and there is a counter-intuitive reason for it.

Full-screen resolutions are shared by enormous numbers of people. A 1920 by 1080 display is close to the most common configuration in the world, and reporting it makes you ordinary. The viewport, by contrast, is your screen minus your browser’s interface minus anything else on screen. It takes values like 1512 by 823 or 1287 by 694 — odd numbers that arise from the particular height of your browser’s tab strip and toolbar, at your particular zoom level.

That is why a maximised window is more distinctive than a small one: it is derived from your exact screen and your exact browser build, so the same odd number appears every time you visit. A window you have casually resized is less stable, but it reflects your personal habits, which is its own kind of signature.

A page can also watch the viewport change: if it listens for the resize event, it can record how you adjust your window over a session, or note whether you never touch it.

ValueWhat it describesHow distinctive
screen.width / heightThe physical panelCommon configurations are shared widely
screen.availHeightPanel minus system barsNarrows the field slightly
window.innerHeightThe viewportOften an odd number, quite distinctive
devicePixelRatioPhysical pixels per CSS pixelUsually 1, 1.5, 2 or 3, coarse alone
screen.colorDepthBits per pixelAlmost always 24; contributes little

Pixel density

devicePixelRatio is coarse but it is not useless. On a typical laptop it holds at 1; on a high-density display it reads 2 or more, and on some scaled configurations it takes intermediate values like 1.25 or 1.5. It separates broad classes of machine — ordinary displays, Retina-class panels, low-end Android hardware — and it explains why a site might serve you a higher-resolution image. You can see yours on the device pixel ratio test.

Two values above are, in practice, nearly constant:

ValueWhat it usually reads
devicePixelRatio1, 1.5, 2 or 3
screen.colorDepth24 bits

Colour depth

Colour depth is the least interesting of the group. Nearly every modern system reports 24 bits, so it contributes almost nothing on its own. The exception is the small population of machines running unusual display configurations, where an unexpected value stands out because it is rare.

A preference that became a signal

One further display-adjacent value has crept into fingerprinting: your colour scheme preference. Pages can read it with the prefers-color-scheme media query, or window.matchMedia('(prefers-color-scheme: dark)'), to decide whether to show a light or dark theme.

That is a legitimate use, and it is why the query exists at all. But it has a side effect. Dark mode adoption is uneven, it is tied to operating system and to habit, and a page that records it gains a stable bit of information about you for free. The dark mode test shows you which value your browser reports, alongside the related contrast and motion preferences that sites can read the same way.

What this means in practice

You cannot do much about your screen, and chasing a common resolution is not worth changing hardware for. What you can do is understand the shape of the problem. Know your viewport, not just your monitor: the odd number your maximised window produces is the one that follows you around, and the screen resolution tool reports it as a script would see it. Do not reach for a spoofing extension: faking a screen size that contradicts your actual rendering creates inconsistencies elsewhere, which makes you easier to spot rather than harder.

Reading your own numbers

The concrete move is to compare what your display reports with what you expected. Open the screen resolution tool and look at the table of values it collects — the viewport, the available area and the full panel side by side. If one of the numbers surprises you, that is the one carrying information about you. For the wider picture of how a display value combines with everything else a page can read, see what browser fingerprinting is.

Test it yourself

More from the blog