Persistent Headers
Persistent Headers
by Raúl Rojas
HTML
<div class="section persist-area">
<div class="section-header-wrapper">
<div class="section-header">Section Header 1</div>
</div>
<div class="section-content">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin eu nisi at tellus efficitur lobortis a suscipit elit. Nulla sem arcu, imperdiet id lorem ut, cursus commodo urna. Duis malesuada pulvinar est, non venenatis nisi euismod nec. Integer euismod commodo ipsum, ac malesuada tellus vehicula eu. Aliquam eget erat interdum, accumsan lorem ac, mollis metus. Ut molestie velit a leo rhoncus, maximus lacinia nisi faucibus. Cras aliquet nec odio ac semper. Integer nec facilisis quam. Curabitur mattis tortor sed leo eleifend, eu laoreet ex cursus. Morbi accumsan congue nisi vitae euismod. Cras id ipsum turpis. Aliquam lacinia, dolor sed pretium tristique, leo massa dapibus lorem, at molestie augue sapien non diam.
</div>
</div>
<div class="section persist-area">
<div class="section-header-wrapper">
<div class="section-header">Section Header 2</div>
</div>
<div class="section-content">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin eu nisi at tellus efficitur lobortis a suscipit elit. Nulla sem arcu, imperdiet id lorem ut, cursus commodo urna. Duis malesuada pulvinar est, non venenatis nisi euismod nec. Integer euismod commodo ipsum, ac malesuada tellus vehicula eu. Aliquam eget erat interdum, accumsan lorem ac, mollis metus. Ut molestie velit a leo rhoncus, maximus lacinia nisi faucibus. Cras aliquet nec odio ac semper. Integer nec facilisis quam. Curabitur mattis tortor sed leo eleifend, eu laoreet ex cursus. Morbi accumsan congue nisi vitae euismod. Cras id ipsum turpis. Aliquam lacinia, dolor sed pretium tristique, leo massa dapibus lorem, at molestie augue sapien non diam.
</div>
</div>
<div class="section persist-area">
<div class="section-header-wrapper">
<div class="section-header">Section Header 3</div>
...
CSS
.section
{
margin: auto;
padding: 20px;
width: 500px;
position: relative;
font-size: 20px;
}
.section-header-wrapper
{
height:20px;
}
.section-header
{
transition: all 0.4s ease;
}
.sticky
{
font-size: 30px;
background-color: rgba(200, 200, 200, 0.5);
height: 40px;
}
.sticky-active
{
position: fixed;
top: 0;
}
.sticky-parked
{
position: absolute;
bottom: 0px;
}
JavaScript
$(document).ready( function() {
function updateTableHeaders() {
$(".persist-area").each(function() {
var el = $(this),
offset = el.offset(),
scrollTop = $(window).scrollTop(),
sectionHeader = $(".section-header", this),
sectionHeaderWrapper = $(".section-header-wrapper", this),
sectionHeaderWrapperOffset = sectionHeaderWrapper.offset(),
sectionContent = $(".section-content", this),
sectionContentOffset = sectionContent.offset();
if ((scrollTop > sectionHeaderWrapperOffset.top))
{
sectionHeader.addClass("sticky");
if ((scrollTop < offset.top + el.outerHeight() - sectionHeader.height()))
{
sectionHeader.removeClass("sticky-parked");
sectionHeader.addClass("sticky-active");
} else
{
sectionHeader.removeClass("sticky-active");
sectionHeader.addClass("sticky-parked");
}
} else
{
sectionHeader.removeClass("sticky-active");
sectionHeader.removeClass("sticky");
}
});
}
updateTableHeaders();
$(window).scroll(updateTableHeaders);
});