Я работаю с несколькими планшетными устройствами - оба Android и iOS. В настоящее время у меня есть следующие варианты разрешения для всех планшетов.
- 1280 х 800
- 1280 x 768
1024 x 768 (очевидно, для iPad)- iPad не имеет этой проблемы
Самый простой способ применить стиль, основанный на ориентации устройства, - использовать ориентацию медиа-запроса с использованием следующего синтаксиса.
@media all and (orientation:portrait)
{
/* My portrait based CSS here */
}
@media all and (orientation:landscape)
{
/* My landscape based CSS here */
}
Это отлично работает на всех планшетных устройствах. НО , проблема в том, что когда устройство находится в портретном режиме, а пользователь нажимает на любое поле ввода (например, поиск), появляется программная клавиатура, которая уменьшает видимую область веб-страницы и заставляет ее отображать в ландшафтном CSS. На планшетах Android это зависит от высоты клавиатуры. Итак, в конечном итоге веб-страница выглядит сломанной. Поэтому я не могу использовать медиа-запрос ориентации CSS3 для применения стилей на основе ориентации (если нет лучшего медиа-запроса для целевой ориентации). Вот скрипка http://jsfiddle.net/hossain/S5nYP/5/, которая эмулирует это - для тестирования устройства используйте полную тестовую страницу - http://jsfiddle.net/S5nYP/embedded/result/
Вот скриншот поведения, взятого с демонстрационной страницы.
Итак, есть ли альтернатива решению этой проблемы, я открыт для решения на основе JavaScript, если собственное решение на основе CSS не работает.
Я нашел фрагмент на http://davidbcalhoun.com/2010/dealing-with-device-orientation, который предлагает добавить класс и настроить таргетинг на основе этого. Например:
<html class="landscape">
<body>
<h1 class="landscape-only">Element Heading - Landscape</h1>
<h1 class="portrait-only">Element Heading - Portrait</h1>
<!-- .... more... ->
# CSS
.landscape .landscape-only { display:block; }
.landspace .portrait-only { display:none; }
.portrait .portrait-only { display:block; }
.portrait .landscape-only { display:none; }
Что вы думаете об этом, ребята? У вас есть лучшее решение?