Ich arbeite mit mehreren Tablet-Geräten - beide Android und iOS. Derzeit habe ich folgende Auflösungsvarianten für alle Tablets.
- 1280 x 800
- 1280 x 768
1024 x 768 (iPad offensichtlich)- iPad hat dieses Problem nicht
Die einfachste Möglichkeit, einen auf Geräteorientierung basierenden Stil anzuwenden, besteht darin, die Ausrichtung der Medienabfrage mithilfe der folgenden Syntax zu verwenden.
@media all and (orientation:portrait)
{
/* My portrait based CSS here */
}
@media all and (orientation:landscape)
{
/* My landscape based CSS here */
}
Dies funktioniert auf allen Tablet-Geräten einwandfrei. ABER das Problem ist, wenn sich das Gerät im Hochformat befindet und der Benutzer auf ein Eingabefeld tippt (z. B. Suchen), wird die Softtastatur angezeigt. Dadurch wird der sichtbare Bereich der Webseite verkleinert und zum Rendern in CSS im Querformat gezwungen. Bei Android-Tablet-Geräten hängt dies von der Höhe der Tastatur ab. Letztendlich sieht die Webseite also kaputt aus. Daher kann ich die Orientierungsmedienabfrage von CSS3 nicht verwenden, um Stile basierend auf der Orientierung anzuwenden (es sei denn, es gibt eine bessere Medienabfrage für die Zielorientierung). Hier ist eine Geige http://jsfiddle.net/hossain/S5nYP/5/, die dies emuliert - für Gerätetests verwenden Sie die vollständige Testseite - http://jsfiddle.net/S5nYP/embedded/result/
Hier ist ein Screenshot des Verhaltens auf der Demoseite.
Gibt es eine Alternative, um dieses Problem zu lösen? Ich bin offen für JavaScript-basierte Lösungen, wenn native CSS-basierte Lösungen nicht funktionieren.
Ich habe auf http://davidbcalhoun.com/2010/dealing-with-device-orientation einen Ausschnitt gefunden, der vorschlägt, darauf basierend Klasse und Ziel hinzuzufügen. Beispielsweise:
<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; }
Was haltet ihr davon? Hast du eine bessere Lösung?