Pracuję z wieloma tabletami - zarówno z systemem Android i iOS. Obecnie mam następujące warianty rozdzielczości dla wszystkich tabletów.
- 1280 x 800
- 1280 x 768
1024 x 768 (oczywiście iPad)- iPad nie ma tego problemu
Najprostszym sposobem zastosowania stylu opartego na orientacji urządzenia jest użycie orientacji zapytania o media przy użyciu następującej składni.
@media all and (orientation:portrait)
{
/* My portrait based CSS here */
}
@media all and (orientation:landscape)
{
/* My landscape based CSS here */
}
Działa to doskonale na wszystkich tabletach. ALE problem polega na tym, że gdy urządzenie jest w trybie portretowym i użytkownik stuka w dowolne pole wejściowe (np. Wyszukiwanie), pojawia się klawiatura ekranowa - co zmniejsza widoczny obszar strony internetowej i zmusza ją do renderowania w css opartym na poziomie. Na tabletach z Androidem zależy to od wysokości klawiatury. Ostatecznie strona wygląda na zepsutą. Dlatego nie mogę użyć zapytania o media w CSS3 do stosowania stylów opartych na orientacji (chyba że istnieje lepsze zapytanie o media do orientacji docelowej). Oto http://jsfiddle.net/hossain/S5nYP/5/ skrzypce, które to emuluje - do testowania urządzeń użyj pełnej strony testowej - http://jsfiddle.net/S5nYP/embedded/result/
Oto zrzut ekranu przedstawiający zachowanie pobrane ze strony demonstracyjnej.
Czy jest więc jakaś alternatywa, aby rozwiązać ten problem, jestem otwarty na rozwiązanie oparte na JavaScript, jeśli natywne rozwiązanie oparte na CSS nie działa.
Znalazłem fragment na http://davidbcalhoun.com/2010/dealing-with-device-orientation, który sugeruje dodanie klasy i celu na tej podstawie. Na przykład:
<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; }
Co o tym myślicie? Czy masz lepsze rozwiązanie?