I have a single website project I’m working on using Bootstrap 3 and it has a sticky header which I like to use for page navigation. It has a logo that’s 90px tall and padding on the <li> tags to compensate for the overall height of the nav bar. I wanted to have the logo, padding and nav bar height change on scroll so that I could still have the branding and navigation but use less space overall when reading the page content. I put together the following solution.
Example
HTML – This is the Bootstrap 3 nav example stripped down to show a logo and 3 links. It is also using a standard container instead of expanded.
<nav class="navbar navbar-default navbar-fixed-top">
<div class="container">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<a href="#main"><img class="logo" src="img/logo.png"></a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav navbar-right">
<li><a href="#section1">Link</a></li>
<li><a href="#section2">Link2</a></li>
<li><a href="#section3">Link3</a></li>
</ul>
</div><!-- /.navbar-collapse -->
</div><!-- /.container-fluid -->
</nav>
CSS – The nav height and logo are set to 90px and the transitions vary and can be changed based on preference.
/*---- Nav ----*/
.logo {
height: 90px;
-webkit-transition: all 0.1s ease;
transition: all 0.1s ease;
}
.logo.shrink {
height: 50px;
}
.navbar-default {
background-color: #fff;
border-color: #fff;
}
.nav>li>a {
position: relative;
display: block;
padding: 35px 12px;
text-transform: uppercase;
font-size: 12px;
font-weight: bold;
-webkit-transition: all 0.2s ease;
transition: all 0.2s ease;
}
.nav>li>a.shrink {
padding: 15px 12px;
}
nav.navbar{
height: 90px;
-webkit-transition: all 0.1s ease;
transition: all 0.1s ease;
overflow: hidden;
}
nav.navbar.shrink {
height: 30px;
}
JS – Add this to your footer or better yet create a file called nav-shrink.js and link it in your footer.
$(window).scroll(function() {
if ($(document).scrollTop() > 50) {
$('nav, .logo, .nav>li>a').addClass('shrink');
} else {
$('nav, .logo, .nav>li>a').removeClass('shrink');
}
});
Conclusion
Just keep in mind that this requires the use of bootstrap 3. If you have any questions about implementation, feel free to ask.




