この質問に対する答えは「いいえ」になると思いますが、それでよかったので、とにかく尋ねます。
私がやろうとしているのは、スクロール可能な DIV 内の要素を固定して、垂直に固定することです。これは、テーブルに固定行機能を実装するためです。
JavaScript と絶対配置を使用すると、非常に簡単に実行できます。コンテナと 3 つの内部 DIV の HTML を次に示します (ライブ バージョンについては、こちらを参照してください)。
<div id="container">
<div id="background">
Content
</div>
<div id="absolutediv">
Absolute stays inside
</div>
<div id="fixeddiv">
Fixed escapes!
</div>
<div id="absolutediv2">
Stays put!
</div>
</div>
関連する CSS:
#container {
position: fixed;
left: 20px;
width: 250px;
height: 250px;
top: 20px;
overflow: scroll;
}
#absolutediv {
position: absolute;
top: 30px;
width: 300px;
background-color: #CEC;
}
#fixeddiv {
position: fixed;
top: 100px;
width: 300px;
background-color: #ECC;
}
#absolutediv2 {
position: absolute;
width: 300px;
top: 120px;
background-color: #ECC;
}
そして、#absolutediv2 を所定の位置に保持する JavaScript:
var div = document.getElementById('absolutediv2');
var container = document.getElementById('container');
container.addEventListener('scroll', function() {
div.style.top = container.scrollTop + 120 + 'px';
});
だから #absolutediv2 は私が望むように動作しています。しかし、#fixeddiv を見てください。これは私が求めているものに近いものであり、ブラウザーがスクリプトの実行を待たずに保持できるため、モバイル デバイスでの見栄えが良くなると思います。ただし、(a) 境界を越えて実行され、(b) 水平方向にスクロールしません。
純粋な CSS を使用して、モバイル ブラウザーで適切に動作するものを取得する方法はありますか?
(私のページでは、これを行う 1 つの方法は、コンテナー DIV の上に固定された行を配置することですが、固定された行の数は、ユーザーがスクロールした場所に応じて変化します。つまり、コンテナー DIV は移動する必要があります。)
編集:
要約すると、次のような div が必要です。
- コンテナごと水平スクロール
- コンテナが垂直方向にスクロールしても動かない
- コンテナに属しているようです
- モバイルブラウザで見栄えが良い
最後の 1 つはトリッキーなビットです。絶対位置の div と JavaScript を使用して 1 番、2 番、3 番を実現できますが、モバイル ブラウザーではラグが発生するため見苦しくなります。固定位置の div を使用すると、#2 と #4 を取得でき、JavaScript で #1 を達成できます (水平方向のラグはそれほど気になりません) が、#3 は達成できません。そのコンテナの上に。
Google にはこの種の提案がありますが、これはかなり極端な解決策です: https://developers.google.com/mobile/articles/webapp_fixed_ui