Nexus 7 screen.width возвращает 800, но максимальная ширина медиазапроса: 720px по-прежнему применяется

У меня есть планшет Google Nexus 7, который я использую для тестирования некоторых адаптивных дизайнов. В JavaScript screen.width возвращает как 800px, как и ожидалось (собственное разрешение).

Как получается, что следующий медиазапрос воспринимается планшетом, когда максимальная ширина экрана> 720px?

@media only screen and (max-width: 720px) and (orientation: portrait) {
    .test{ background: red;}
}

1 ответ

Решение

Android выполняет целевое масштабирование плотности, чтобы приспособиться к различным плотностям экрана в экосистеме Android. Браузер Android по умолчанию настроен на среднюю плотность экрана, пытаясь эмулировать размер элементов, как если бы это был экран MDPI.

Используя этот сайт, вы можете увидеть, что результатом этого масштабирования является то, что device-width является 601 px а также device-height является 880 px на Nexus 7. Следовательно, он попадает в ваши max-width: 720px объявление и фон выглядит красным.

Скриншот

window.screen.width а также .height всегда возвращает фактический размер экрана. Вы должны помнить, что Размер области просмотра и Размер экрана - это две разные вещи.

Если вы не хотите этого поведения, вы можете добавить target-densitydpi=device-dpi на ваш <meta name="viewport"> тег. Это отключит масштабирование плотности цели Android: device-width а также device-height сообщит о родном разрешении экрана устройства.

Дополнительную информацию о масштабировании целевой плотности Android можно найти в документации разработчиков Android.

Другие вопросы по тегам