Instantly share code, notes, and snippets.
Last active
June 6, 2023 10:19
-
Star
(120)
120
You must be signed in to star a gist -
Fork
(35)
35
You must be signed in to fork a gist
-
Save thomaspark/4394162 to your computer and use it in GitHub Desktop.
Subnav for Bootstrap 2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
section { | |
padding-top: 60px; | |
} | |
.subnav { | |
margin-bottom: 60px; | |
width: 100%; | |
height: 36px; | |
background-color: #eeeeee; /* Old browsers */ | |
background-repeat: repeat-x; /* Repeat the gradient */ | |
background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); /* FF3.6+ */ | |
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f5f5f5), color-stop(100%,#eeeeee)); /* Chrome,Safari4+ */ | |
background-image: -webkit-linear-gradient(top, #f5f5f5 0%,#eeeeee 100%); /* Chrome 10+,Safari 5.1+ */ | |
background-image: -ms-linear-gradient(top, #f5f5f5 0%,#eeeeee 100%); /* IE10+ */ | |
background-image: -o-linear-gradient(top, #f5f5f5 0%,#eeeeee 100%); /* Opera 11.10+ */ | |
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); /* IE6-9 */ | |
background-image: linear-gradient(top, #f5f5f5 0%,#eeeeee 100%); /* W3C */ | |
border: 1px solid #e5e5e5; | |
-webkit-border-radius: 4px; | |
-moz-border-radius: 4px; | |
border-radius: 4px; | |
} | |
.subnav .nav { | |
margin-bottom: 0; | |
} | |
.subnav .nav > li > a { | |
margin: 0; | |
padding-top: 11px; | |
padding-bottom: 11px; | |
border-left: 1px solid #f5f5f5; | |
border-right: 1px solid #e5e5e5; | |
-webkit-border-radius: 0; | |
-moz-border-radius: 0; | |
border-radius: 0; | |
} | |
.subnav .nav > .active > a, | |
.subnav .nav > .active > a:hover { | |
padding-left: 13px; | |
color: #777; | |
background-color: #e9e9e9; | |
border-right-color: #ddd; | |
border-left: 0; | |
-webkit-box-shadow: inset 0 3px 5px rgba(0,0,0,.05); | |
-moz-box-shadow: inset 0 3px 5px rgba(0,0,0,.05); | |
box-shadow: inset 0 3px 5px rgba(0,0,0,.05); | |
} | |
.subnav .nav > .active > a .caret, | |
.subnav .nav > .active > a:hover .caret { | |
border-top-color: #777; | |
} | |
.subnav .nav > li:first-child > a, | |
.subnav .nav > li:first-child > a:hover { | |
border-left: 0; | |
padding-left: 12px; | |
-webkit-border-radius: 4px 0 0 4px; | |
-moz-border-radius: 4px 0 0 4px; | |
border-radius: 4px 0 0 4px; | |
} | |
.subnav .nav > li:last-child > a { | |
border-right: 0; | |
} | |
.subnav .dropdown-menu { | |
-webkit-border-radius: 0 0 4px 4px; | |
-moz-border-radius: 0 0 4px 4px; | |
border-radius: 0 0 4px 4px; | |
} | |
@media (max-width: 767px) { | |
.subnav { | |
position: static; | |
top: auto; | |
z-index: auto; | |
width: auto; | |
height: auto; | |
background: #fff; /* whole background property since we use a background-image for gradient */ | |
-webkit-box-shadow: none; | |
-moz-box-shadow: none; | |
box-shadow: none; | |
} | |
.subnav .nav > li { | |
float: none; | |
} | |
.subnav .nav > li > a { | |
border: 0; | |
} | |
.subnav .nav > li + li > a { | |
border-top: 1px solid #e5e5e5; | |
} | |
.subnav .nav > li:first-child > a, | |
.subnav .nav > li:first-child > a:hover { | |
-webkit-border-radius: 4px 4px 0 0; | |
-moz-border-radius: 4px 4px 0 0; | |
border-radius: 4px 4px 0 0; | |
} | |
} | |
@media (min-width: 980px) { | |
.subnav-fixed { | |
position: fixed; | |
top: 40px; | |
left: 0; | |
right: 0; | |
z-index: 1020; /* 10 less than .navbar-fixed to prevent any overlap */ | |
border-color: #d5d5d5; | |
border-width: 0 0 1px; /* drop the border on the fixed edges */ | |
-webkit-border-radius: 0; | |
-moz-border-radius: 0; | |
border-radius: 0; | |
-webkit-box-shadow: inset 0 1px 0 #fff, 0 1px 5px rgba(0,0,0,.1); | |
-moz-box-shadow: inset 0 1px 0 #fff, 0 1px 5px rgba(0,0,0,.1); | |
box-shadow: inset 0 1px 0 #fff, 0 1px 5px rgba(0,0,0,.1); | |
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); /* IE6-9 */ | |
} | |
.subnav-fixed .nav { | |
width: 938px; | |
margin: 0 auto; | |
padding: 0 1px; | |
} | |
.subnav .nav > li:first-child > a, | |
.subnav .nav > li:first-child > a:hover { | |
-webkit-border-radius: 0; | |
-moz-border-radius: 0; | |
border-radius: 0; | |
} | |
} | |
@media (min-width: 1210px) { | |
.subnav-fixed .nav { | |
width: 1168px; /* 2px less to account for left/right borders being removed when in fixed mode */ | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<body data-spy="scroll" data-target=".subnav" data-offset="100"> | |
<div class="container"> | |
<div class="subnav"> | |
<ul class="nav nav-pills"> | |
<li><a href="#section1">Section 1</a></li> | |
<li><a href="#section2">Section 2</a></li> | |
<li><a href="#section3">Section 3</a></li> | |
</ul> | |
</div> | |
</div> | |
<section id="section1"> | |
<h1>Section 1</h1> | |
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.</p> | |
</section> | |
<section id="section2"> | |
<h1>Section 2</h1> | |
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.</p> | |
</section> | |
<section id="section3"> | |
<h1>Section 3</h1> | |
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.</p> | |
</section> | |
</body> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(function ($) { | |
$(function(){ | |
// fix sub nav on scroll | |
var $win = $(window), | |
$body = $('body'), | |
$nav = $('.subnav'), | |
navHeight = $('.navbar').first().height(), | |
subnavHeight = $('.subnav').first().height(), | |
subnavTop = $('.subnav').length && $('.subnav').offset().top - navHeight, | |
marginTop = parseInt($body.css('margin-top'), 10); | |
isFixed = 0; | |
processScroll(); | |
$win.on('scroll', processScroll); | |
function processScroll() { | |
var i, scrollTop = $win.scrollTop(); | |
if (scrollTop >= subnavTop && !isFixed) { | |
isFixed = 1; | |
$nav.addClass('subnav-fixed'); | |
$body.css('margin-top', marginTop + subnavHeight + 'px'); | |
} else if (scrollTop <= subnavTop && isFixed) { | |
isFixed = 0; | |
$nav.removeClass('subnav-fixed'); | |
$body.css('margin-top', marginTop + 'px'); | |
} | |
} | |
}); | |
})(window.jQuery); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I just updated the JS code to get rid of content "jumps" when subnav changes to subnav-fixed.