You should leverage the manufacturer’s hint via the <meta name="viewport" content="width=device-width"/>
or @-ms-viewport {width:device-width}
feature. It basically exposes the default zoom the device manufacturer considers optimal given the pixel density of the screen. After you do that, when you call window.innerWidth
it will give you what your original equation was intended for but without relying on a measurement of pixel density.
Avoid relying on window.devicePixelRatio
for anything. Its meaning and the value it returns is currently in a state of flux and anything you make right now based around it will most likely break very soon.
Note:
Meta viewport only works on Android, iOS, and Windows Phone 8. @-ms-viewport
only works (properly) on IE10 Metro and can interfere with proper Meta viewport behavior on Windows Phone 8.