Да, либо fixed, либо олдскул:
<!DOCTYPE html>
<html lang="ru-RU">
<head>
<meta charset="UTF-8">
<style type="text/css">
*{margin: 0; padding: 0;}
html, body, .main{
width: 100%;
height: 100%;
overflow: hidden;
}
.main {
overflow: auto;
}
.sidebar {
width:200px;
margin-right: -200px;
left: 0;
bottom : 0;
float:left;
position: relative;
height: 800px;
background-color:#ddf;
}
.content{
margin-left: 200px;
position: relative;
height: 2000px;
background-color: #dfd;
}
.bottom-span{
position: absolute;
bottom:0;
left: 0;
}
.middle-span{
position: absolute;
bottom:50%;
left: 0;
}
</style>
</head>
<body>
<div class="main">
<div class="sidebar">
верх
<span class="middle-span">середина</span>
<span class="bottom-span">низ</span>
</div>
<div class="content">
Контент верх
<span class="middle-span">Контент середина</span>
<span class="bottom-span">Контент низ</span>
</div>
</div>
<script type="text/javascript">
(function(){
var main = document.getElementsByClassName('main')[0],
sidebar = document.getElementsByClassName('sidebar')[0],
fixed = false;
main.onscroll = function(){
var scroll = main.scrollTop;
if(scroll > sidebar.offsetHeight - main.clientHeight) {
if(fixed) return;
sidebar.style.position = 'absolute';
fixed = true;
}
else {
if(!fixed) return;
sidebar.style.position = '';
fixed = false;
}
}
}())
</script>
</body>
</html>