ある位置にダイアログボックスを表示するモバイルウェブアプリがあります。固定要素が画面全体に重なっています。表示されるコンテンツの量やページのスクロール距離に関係なく、overlay要素はページのコンテンツを暗くし、その上にダイアログが表示されます。<input type="search />
ダイアログにフィールドがあります。
Androidでは、ユーザーが入力フィールドをタップしてフォーカスを与えると、かなり不安定な動作が頻繁に発生します(常にではありません)。
- ソフトキーボードが表示され、すぐに消えます。
- 下にあるページ(オーバーレイで覆われている)は、数十ピクセル、場合によっては上、場合によっては下、場合によっては両方向、場合によっては繰り返しスクロールします。これは、入力フィールドがフォーカスを失ったときにも発生します。
- オーバーレイ要素は瞬間的に数ピクセル上下にシフトし、画面の上端と左端に沿って基になるコンテンツを表示します。(1秒以内に元の場所に戻ります。)
これは、組み込みのブラウザを備えたAndroid2.3.4にあります。他のAndroidバージョンでも発生する可能性があります。
ページは次のように構成されています:(これらの癖のいくつかは、ページにスクロールを許可するのに十分なコンテンツが含まれている場合にのみ表示されることに注意してください。)
<head>
<style type="text/css">
#menuoverlay {
position: fixed;
top: 0;
bottom: 0;
left: 0;
right: 0;
z-index: 10;
background-color: rgba(0,0,0,.75);
text-align: center;
}
#menu {
display: inline-block;
margin-top: 1em;
border: 3px solid #02b;
border-radius: 8px;
padding: 1ex;
background-color: black;
color: silver;
}
</style>
</head>
<body>
<div id="menuoverlay">
<div id="menu">
...menu items...
...menu items...
<form action=""><input type="search"/></form>
</div>
</div>
<div id="content">
...lots of stuff...
...lots of stuff...
...lots of stuff...
</div>
<body>
他の誰かがこの振る舞いを見たことがありますか?それを防ぐ方法を見つけましたか?
Webを精査すると、同様の問題に関するいくつかの報告がありました。これまでに読んだ内容の要約は次のとおりです。
- 多くのAndroidデバイスでは、組み込みのブラウザーがWebKitの入力フィールドを期待どおりに使用していないようです。代わりに、htmlで定義されたフィールドがフォーカスを取得すると、ブラウザーは、個別に作成する新しいテキストウィジェットでそれらをカバーしようとします。
- これらの重複するテキストフィールドは、多くの場合、cssスタイルを無視し、フォーカスが得られるまでフィールドがスタイル設定されているように見え、その後突然システムのデフォルトスタイルに戻るという効果を生み出します。
- Androidブラウザーは、これらの重複フィールドを正しく配置できないことがよくあります。置き忘れた場合、それらが表示される場合もありますが、移動したことを視覚的に示すことなく、フォーカスターゲットを移動する場合もあります。
- これらの問題は、入力フィールドの祖先要素に、、、またはのようなスタイルがある場合によく発生
transform: translate3d()
し-webkit-backface-visibility
ますposition: fixed
。
関連するリンクは次のとおりです。
Androidブラウザのテキストエリアはいたるところにスクロールし、使用できません
Android 2.2以降に焦点を合わせたときにCSSを維持するように、HTML INPUTタグのスタイルを設定するにはどうすればよいですか?