I mean, every device is different. You don't want a "px" on your phone to be the same as a "px" on your desktop, which also shouldn't be the same as a "px" on your projector.
A "px", right now, is whatever the device+OS combo wants it to be, but that works, because they all try to make things the "right size" given the device size, resolution, and distance from your eye.
And it works fine. Just accept that "px" is device-defined, and it all works, just like it does now in practice.
Nope! "px" is defined by the CSS spec. The physical pixels are device-defined as is the exact anti-aliasing algorithm but the spec dictates the dimensions of a logical ("px") pixel in the real world. Devices are not free to make "px" whatever they want it to be, because "px" is a logical pixel not a physical one. (Though it is a physical length).
A classic example of why this matters is that Windows treats the screen as 96dpi but OS X treats it as 72dpi. If the CSS spec did not dictate the size of a "px" then all web pages on OS X would look 26% smaller than on Windows.
My point is that they would look larger on OS X (lower dpi == larger pixels)
I just added a 960px <hr> to this web page. On my monitor, attached to a MBP running OS 10.6, it measures about 9.5 inches (by holding up a ruler to the screen). That would indicate OS X treats my screen as about 100 dpi.
The monitor is 30" diagonal, 2560x1600. So, calculating the dpi:
irb(main):010:0* ratio = 1600/2560.0
=> 0.625
irb(main):011:0> width = 30.0/Math.sqrt(1 + ratio*ratio)
=> 25.4399491201526
irb(main):012:0> dpi = 2560.0/width
=> 100.62913207527
One of these days, I'm going to get around to buying a new Retina MBP. Then, I'll try that exercise again.> The way the CSS authors handled this problem (again, sensibly, IMO), was to allow the user agent (ie. the browser) to choose a useful precise size for the “px” unit and then size all the other units relative to that “px” unit.
So I'm a little confused about what you mean when you say, "Nope! "px" is defined by the CSS spec."
The whole point of HTML/CSS is that you don't get to design pixel-perfect layouts (use something like PDF for that). The device is free to reflow pages and layouts as it sees fit. If OSX users prefer to see web pages as smaller than windows users, why not just let them?
> You don't want a "px" on your phone to be the same as a
> "px" on your desktop, which also shouldn't be the same
> as a "px" on your projector.
Of course you do. How will you get pixel-correct rendering when the browser is reinterpreting the meaning of a pixel?Designers who want to render at a particular size (e.g. for buttons that a user will push) should specify sizes in physical dimensions, such as inches or cm.
So a one inch square button on my two inch wide phone will also be one inch wide on my 10 foot projector?
Furthermore, some graphics are always going to be bitmaps, such as photos. Tasks like "center this image square, but don't make it blurry" requires pixel-perfect positioning.