私は複数のタブレットデバイスを使用しています-両方ともAndroid およびiOS。現在、すべてのタブレットで次の解像度のバリエーションがあります。
- 1280 x 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 */
}
これは、すべてのタブレットデバイスで完全に正常に機能します。しかし、問題は、デバイスがポートレートモードで、ユーザーが任意の入力フィールド(検索など)をタップすると、ソフトキーボードがポップアップすることです。これにより、Webページの表示領域が縮小され、ランドスケープベースのCSSでレンダリングされます。Androidタブレットデバイスでは、キーボードの高さに依存します。したがって、最終的にWebページは壊れているように見えます。したがって、CSS3のオリエンテーションメディアクエリを使用して、オリエンテーションに基づいてスタイルを適用することはできません(ターゲットのオリエンテーションに適したメディアクエリがない限り)。これは、これをエミュレートするフィドルhttp://jsfiddle.net/hossain/S5nYP/5/です-デバイステストには、完全なテストページを使用してください-http://jsfiddle.net/S5nYP/embedded/result/
これは、デモページから取得した動作のスクリーンショットです。
したがって、この問題に取り組むための代替手段はありますか?ネイティブのCSSベースのソリューションが機能しない場合は、JavaScriptベースのソリューションを利用できます。
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; }
これについてどう思いますか?より良い解決策はありますか?