Я работаю с несколькими планшетными устройствами - Android и iOS. В настоящее время у меня есть следующие варианты разрешения для всех таблиц.
- 1280 x 800
- 1280 x 768
-
1024 x 768 (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; }
Что вы, ребята, думаете об этом? У вас есть лучшее решение?