I have a Google Nexus 7 tablet I'm using for testing some responsive designs. In Javascript, the screen.width
returns as 800px, as expected (the native resolution).
How come the following media query is picked up by the tablet when the max width of the screen is > 720px?
@media only screen and (max-width: 720px) and (orientation: portrait) {
.test{ background: red;}
}
Android does target density scaling in order to accommodate the varying screen densities of the Android ecosystem. The Android browser targets a medium screen density by default, trying to emulate the size of elements as if the screen was an MDPI screen.
Using this website, you can see that the result of this scaling is that
device-width
is601 px
anddevice-height
is880 px
on the Nexus 7. Therefore, it falls within yourmax-width: 720px
declaration and the background appears red.window.screen.width
and.height
always returns the actual screen size. You have to remember that the Viewport Size and the Screen Size are two different things altogether.If you do not want this behavior, you may add
target-densitydpi=device-dpi
to your<meta name="viewport">
tag. This will disable the Android target density scaling:device-width
anddevice-height
will report the native screen resolution of the device.More information about Android's target density scaling is available in the Android Developers' Documentation.