Actual size · earned, then checked against a second object
An actual-size ruler — and what actual size costs to earn
"Actual size" is a claim, and on a screen it is a claim nothing in the browser can support on its own. A CSS inch is 96 pixels by definition, not by measurement, and on the seven displays tabulated below that definition lands anywhere from 66 per cent short to 5 per cent long. This page is the one that does the work in the open: match a card and the scale becomes yours to within a stated band, then match a sheet of A4 and see whether two independent objects agree.
UNCALIBRATED — assumed 96 CSS ppi
This is not actual size yet. Match a bank card to make it so.
Nothing is being withheld on this display: every graduation in the current scale is drawn.
Step one — earn it with a bank card
Hold any bank card, ID card or driving licence against the outline below and drag until the edges agree. ISO/IEC 7810 fixes the format at 85.60 by 53.98 mm, and the row that governs a card in a wallet — personalized and returned cards — allows 85.37 to 85.90 mm along the long edge. That is a bound of 0.351%, to which 0.7 mm of ordinary alignment slop across two edges adds 0.818%. Added as bounds rather than combined in quadrature, because a ± sign reads as a bound, that is the ±1.2% the readout will print, and it is a real number rather than a reassurance: on a 200 mm measurement it is 2.4 mm.
The short edge is offered and costs more — ±1.7%, because the same slop is a larger share of 53.98 mm. On a phone in portrait, where 85.60 mm will not fit across the glass, stand the card upright and match it down the screen: the reference stays the full long edge and so does the band.
Typing the diagonal your screen was sold as moves the outline to roughly the right size so there is less dragging to do. It never earns a badge and never turns anything green: it assumes the pixel count your browser reports is the panel's own, which is false under macOS scaled resolutions, false in Safari under page zoom, and false wherever a fingerprinting-resistance mode is rewriting those numbers. Once a card has been matched it also prints the two figures side by side, as a sanity check and nothing more.
Step two — check it against a second object
One measurement is a measurement. Two independent measurements that agree are evidence, and this is the only thing on the site that earns the word verified. Take a sheet of A4, match its outline the same way, and the page prints how far apart the two answers are as a percentage of their mean. Inside 1% the readout says cross-checked. Outside it, the number is printed and the card measurement stands exactly as it was.
Paper is a second opinion here and never the calibration itself, and the tool refuses it as a primary rather than warning about it. A sheet bows away from a vertical screen and that bias is systematic — it sits outside the ±1.0% the long edge earns, which covers only ISO 216's ±2 mm trim tolerance and your alignment. What paper brings instead is length: 297 mm against a card's 85.60, so the same hand slop is a much smaller share of it.
NOTHING TO CHECK YET — calibrate against a card first
What a disagreement above 1% means, stated as arithmetic because a tidier sentence would overstate it: a card at ±1.2% and an A4 long edge at ±1.0% can differ by ±2.1% with both readings correct and inside their own bands, against a 1% gate. So above 1% the second object has not confirmed the first. It has not shown it wrong either, and this page will not say that it has. Re-matching the card starts again from one measurement, because the sheet agreed with a number that no longer exists.
What an uncalibrated inch actually measures
CSS defines an inch as exactly 96 pixels and a millimetre as 96/25.4 pixels, and no shipping browser resolves those units against the real geometry of the display, because no browser is told what that geometry is. The frequently repeated claim that physical units "become real" on high-density devices is an artefact of how the specification describes its anchor unit, not a behaviour anything implements. So an uncalibrated on-screen ruler is not a ruler with a small error; it is a ruler whose error is whatever the gap happens to be between your panel and 96 pixels per inch.
| Display | Panel density | Pixel ratio | CSS px per real inch | A CSS inch renders as |
|---|---|---|---|---|
| 24-inch 1920×1080 | 91.8 ppi | 1 | 91.8 | 1.046 in (+4.6%) |
| 27-inch 2560×1440 | 108.8 ppi | 1 | 108.8 | 0.88 in (−12%) |
| MacBook Pro 14-inch, default scaling | 254 ppi | 2 | 127 | 0.76 in (−24%) |
| 13.3-inch 1920×1080 at 100% | 166 ppi | 1 | 166 | 0.58 in (−42%) |
| iPhone 15 | 460 ppi | 3 | 153 | 0.63 in (−37%) |
| Pixel 7 | 416 ppi | 2.625 | 158.5 | 0.61 in (−39%) |
| 15.6-inch 4K at 100% | 282 ppi | 1 | 282 | 0.34 in (−66%) |
Two things follow, and both of them are why this page is built the way it is. The errors are large enough to matter for anything anyone would actually use a ruler for — a ring, a bolt, a picture frame — and they are not in a consistent direction, so no fudge factor rescues them. And they are invisible: an uncalibrated ruler drawn at 96 pixels per inch looks exactly like a calibrated one, which is why the state of the calibration is printed beside every reading on this site instead of being inferred from how finished the page looks.
None of this applies to measuring something that is itself on the glass — an image, a button, a gap in a layout. That is a layout distance rather than a physical one, it is exact in CSS pixels without any calibration at all, and it has its own instrument.
What is measured, how it is kept, and what it cannot tell you
What is measured. The ratio between an object of known size and the pixels it covers on your display — one number, from which every reading on this page is arithmetic. The object has to be one whose dimensions a published standard fixes and whose tolerance has been read out of that standard and recorded with two independent sources, which is why exactly one object is offered as a primary and one as a check, and why the objects that were verified and withheld anyway are listed with their reasons. Marks are drawn at their exact fractional pixel positions and never snapped to whole pixels, because a snapped mark can sit up to half a pixel from where the arithmetic put it.
How it is kept. As device pixels per millimetre in your own browser storage, together with a record of what the display was reporting when you took it. Page zoom moves the browser's pixel ratio on Chrome, Edge and Firefox, and an operating-system display-scaling change moves it on Windows and on GNOME; dividing by the current ratio recovers the original figure, so the calibration survives those and says when it has corrected itself. It does not survive everything by arithmetic: Safari does not report page zoom through that ratio, and on a macOS scaled resolution the scaling factor lands in the reported pixel count instead — each of those is caught as a change to the display and re-offered for a twenty-second re-match, never corrected by a factor the page cannot see. The environment record is re-read on every visit and on a timer rather than on an event, because a pixel-ratio change can fire no events at all. Nothing is sent anywhere: the content security policy served with this site permits the page to talk to no origin, so that is enforced by the browser rather than promised in a sentence.
What it cannot tell you. Whether the screen in front of you is the screen you calibrated on. A swap to a different monitor of the same resolution is undetectable — a 1080p profile moved from a 24-inch panel to a 32-inch one is a third wrong with every signal identical — and so are casting, mirroring, an operating-system magnifier, and the same profile carried to another machine. That is the reason for the neutral states: when the display reports anything new, or when a calibration is old, the readout drops out of green and says which of those happened rather than continuing to look confident.