Skip to content

Instantly share code, notes, and snippets.

@frensuren
Created November 27, 2014 10:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save frensuren/b23a20a6fa4943d5afb6 to your computer and use it in GitHub Desktop.
Save frensuren/b23a20a6fa4943d5afb6 to your computer and use it in GitHub Desktop.
JQuery RelativeFixed Plugin
<div class="container">
<div class="relativeFixed">
I'm fixed relative to my parent
</div>
<div class="content">
<h1>HTML Ipsum Presents</h1>
<p><strong>Pellentesque habitant morbi tristique</strong> senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. <em>Aenean ultricies mi vitae est.</em> Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, <code>commodo vitae</code>, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. <a href="#">Donec non enim</a> in turpis pulvinar facilisis. Ut felis.</p>
<h2>Header Level 2</h2>
<ol>
<li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</li>
<li>Aliquam tincidunt mauris eu risus.</li>
</ol>
<blockquote><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus magna. Cras in mi at felis aliquet congue. Ut a est eget ligula molestie gravida. Curabitur massa. Donec eleifend, libero at sagittis mollis, tellus est malesuada tellus, at luctus turpis elit sit amet quam. Vivamus pretium ornare est.</p></blockquote>
<h3>Header Level 3</h3>
<ul>
<li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</li>
<li>Aliquam tincidunt mauris eu risus.</li>
</ul>
<pre><code>
#header h1 a {
display: block;
width: 300px;
height: 80px;
}
</code></pre>
</div>
</div>

JQuery RelativeFixed Plugin

Fixing an element relative to the parent which has overflow scroll.

A Pen by Surendra on CodePen.

License.

//plugin to relatively fix the elements in a container with scroll
$.fn.relativeFixed = function (options) {
if (this.length == 0)
return this;
var defaults = {
parentDiv: ''
}
var plugin = {};
var el = this;
var init = function () {
//add class to the parent div
el.parent().addClass('aps-relativeFixed-parent');
plugin.settings = $.extend(defaults, options);
if (plugin.settings.parentDiv == '') {
//store the parent div object
plugin.settings.parentDiv = el.parent('.aps-relativeFixed-parent');
}
else {
plugin.settings.parentDiv = $(plugin.settings.parentDiv);//create a jquery object for parentDiv
}
el.css({
'position': 'absolute'
});
//get the element current offset
plugin.currentOffsetTop = el.offset().top - plugin.settings.parentDiv.offset().top;
//attach event of scroll on the parent div
$(plugin.settings.parentDiv).on('scroll', function () {
var newOffset = plugin.currentOffsetTop + plugin.settings.parentDiv.scrollTop();
el.css({
'top': 0,
'bottom': 'auto',
'transform': 'translate3d(0,' + newOffset + 'px,0)',
'-webkit-transform': 'translate3d(0,' + newOffset + 'px,0)',
'-moz-transform': 'translate3d(0,' + newOffset + 'px,0)',
});
}).scroll();
}
el.destroy = function () {
el.removeAttr('style');
plugin.settings.parentDiv.removeClass('aps-relativeFixed-parent');
plugin.settings.parentDiv.off('scroll');
}
init();
return this;
}
//end plugin
//calling the plugin
$('.relativeFixed').relativeFixed();
*{
-webkit-box-sizing:border-box;
-moz-box-sizing:border-box;
box-sizing:border-box;
}
body{
font-size:16px;
font-family:"Verdana",sans-serif;
}
.container{
background:#ccc;
width:600px;
height:400px;
margin:0 auto;
overflow-y:auto;
position:relative;
padding:20px 0;
}
.relativeFixed{
position:absolute;
left:12px;
top:120px;
width:100px;
padding:20px;
background:#333;
font-size:14px;
color:#fff;
}
.content{
background:#fff;
width:80%;
margin:0 auto;
padding:20px;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment