Reputation: 1136
I have a side bar with a header. Sometimes the content overflows so I used an overflow-y: scroll
on the entire element. But now the header (with the close action) moves out of the view when I scroll. I'd like the header to stay fixed when the content scrolls.
Is there a way to do this using only CSS?
*, *:after, *:before {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
html, body {
height: 100%;
font-family: 'Open Sans', sans-serif;
}
html {
font-size: 10px;
-webkit-tap-highlight-color: transparent;
}
body {
color: #999;
font-size: 14px;
line-height: 20px;
}
#side-panel.presented {
right: 0;
}
#side-panel {
border-left: none;
bottom: 0;
position: fixed;
right: -400px;
top: 60px;
width: 400px;
overflow-y: scroll;
-moz-box-shadow: -2px 0 5px #dfdfdf;
-webkit-box-shadow: -2px 0 5px #dfdfdf;
box-shadow: -2px 0 5px #dfdfdf;
}
<div id="side-panel" class="ember-view presented">
<div class="side-panel-header">
<h2>My header</h2>
</div>
<div class="side-panel-body">
<div class="timeline">
<ol>
<li><div class="type" data-type="milestone">thing</div></li>
<li><div class="type" data-type="milestone">thing</div></li>
<li><div class="type" data-type="milestone">thing</div></li>
<li><div class="type" data-type="milestone">thing</div></li>
<li><div class="type" data-type="milestone">thing</div></li>
<li><div class="type" data-type="milestone">thing</div></li>
<li><div class="type" data-type="milestone">thing</div></li>
<li><div class="type" data-type="milestone">thing</div></li>
<li><div class="type" data-type="milestone">thing</div></li>
<li><div class="type" data-type="milestone">thing</div></li>
<li><div class="type" data-type="milestone">thing</div></li>
<li><div class="type" data-type="milestone">thing</div></li>
<li><div class="type" data-type="milestone">thing</div></li>
<li><div class="type" data-type="milestone">thing</div></li>
<li><div class="type" data-type="milestone">last</div></li>
</ol>
</div>
</div>
</div>
Upvotes: 2
Views: 232
Reputation: 78686
If you move the scrollable content on .side-panel-body
and set a height
that is smaller than the container, also leave enough room for the heading. That should do it.
*, *:before, *:after {
box-sizing: border-box;
}
#side-panel {
position: fixed;
bottom: 0;
right: 0;
width: 400px;
height: 200px;
border: 1px solid;
}
.side-panel-body {
width: 100%;
height: 100px;
overflow: auto;
}
<div id="side-panel" class="ember-view presented">
<div class="side-panel-header">
<h2>My header</h2>
</div>
<div class="side-panel-body">
<div class="timeline">
<ol>
<li><div class="type" data-type="milestone">thing</div></li>
<li><div class="type" data-type="milestone">thing</div></li>
<li><div class="type" data-type="milestone">thing</div></li>
<li><div class="type" data-type="milestone">thing</div></li>
<li><div class="type" data-type="milestone">thing</div></li>
<li><div class="type" data-type="milestone">thing</div></li>
<li><div class="type" data-type="milestone">thing</div></li>
<li><div class="type" data-type="milestone">thing</div></li>
<li><div class="type" data-type="milestone">thing</div></li>
<li><div class="type" data-type="milestone">thing</div></li>
<li><div class="type" data-type="milestone">thing</div></li>
<li><div class="type" data-type="milestone">thing</div></li>
<li><div class="type" data-type="milestone">thing</div></li>
<li><div class="type" data-type="milestone">thing</div></li>
<li><div class="type" data-type="milestone">last</div></li>
</ol>
</div>
</div>
</div>
Upvotes: 2
Reputation: 1275
Try adding this:
.side-panel-header{
position: fixed;
background-color: white;
height: 50px;
}
.side-panel-body{
padding-top: 35px;
}
Is that what you were going for?
Another option is you give the overflow property, just to the body
.side-panel-body{
overflow-y: scroll;
height: 100%;
}
Upvotes: 0