サイドバーとして、レイアウトにposition: fixed
divがあります。そのコンテンツの一部を上部に固定しておくように(内部で)求められ、残りはdivの下部をオーバーフローする場合にスクロールします。
この回答 を見てきましたが、そこに提示されている解決策はposition: fixed
またはposition: absolute
コンテナでは動作しません。これは苦痛です。
私は自分の問題のJSFiddleデモを作成しました here 。大量のテキストは、ページの下部にオーバーフローするのではなく、理想的にスクロールする必要があります。ヘッダーの高さはコンテンツによって異なり、アニメーション化される場合があります。
body {
background: #eee;
font-family: sans-serif;
}
div.sidebar {
padding: 10px;
border: 1px solid #ccc;
background: #fff;
position: fixed;
top: 10px;
left: 10px;
bottom: 10px;
width: 280px;
}
div#fixed {
background: #76a7dc;
padding-bottom: 10px;
color: #fff;
}
div#scrollable {
overlow-y: scroll;
}
<div class="sidebar">
<div id="fixed">
Fixed content here, can be of varying height using jQuery $.animate()
</div>
<div id="scrollable">
Scrolling content<br><br>
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>
</div>
固定ヘッダーがなければ、overflow-y: scroll
をdiv.sidebar
に追加するだけで、コンテナの下部からオーバーフローした場合は、すべてのコンテンツを喜んでスクロールできます。しかし、サイドバーの上部に固定された可変の高さのヘッダーがあり、コンテナに収まるには長すぎる場合はそのスクロールの下にコンテンツがあるという問題に直面しています。
div.sidebar
mustposition: fixed
にとどまり、ハックせずにこれをやりたいです。可能な限りクロスブラウザ。私はさまざまなことを試みましたが、どれも機能せず、ここから何を試すべきかわかりません。
position: fixed
コンテナ内のdivを、コンテンツが含まれるdivからオーバーフローするときにY方向にのみスクロールし、さまざまな不定の高さの固定ヘッダーを使用するにはどうすればよいですか?私はJSに近づかないようにしたいのですが、もしそれを使わなければならないなら、私はそうします。
使用するとうまくいくようです
div#scrollable {
overflow-y: scroll;
height: 100%;
}
padding-bottom: 60px
をdiv.sidebar
に追加します。
例: http://jsfiddle.net/AKL35/6/
ただし、60px
である必要がある理由はわかりません。
また、overflow-y: scroll;
からf
を見逃しました
私のために働いたもの:
div#scrollable {
overflow-y: scroll;
max-height: 100vh;
}
スクロール可能なdivを絶対位置に変更しましたが、すべてがうまくいきます
div.sidebar {
overflow: hidden;
background-color: green;
padding: 5px;
position: fixed;
right: 20px;
width: 40%;
top: 30px;
padding: 20px;
bottom: 30%;
}
div#fixed {
background: #76a7dc;
color: #fff;
height: 30px;
}
div#scrollable {
overflow-y: scroll;
background: lightblue;
position: absolute;
top:55px;
left:20px;
right:20px;
bottom:10px;
}
実際、これはそれを行うより良い方法です。 height: 100%
が使用されている場合、コンテンツは境界から外れますが、95%
である場合、すべてが順序どおりになります。
div#scrollable {
overflow-y: scroll;
height: 95%;
}