<!DOCTYPE html>
<html>
<head>
<script data-require="jquery@*" data-semver="2.0.3" src="http://code.jquery.com/jquery-2.0.3.min.js"></script>
<script data-require="bootstrap@*" data-semver="3.1.1" src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
<script src="sidebar.js"></script>
<link data-require="bootstrap-css@3.1.1" data-semver="3.1.1" rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" />
<link rel="stylesheet" href="style.css" />
<link rel="stylesheet" href="sidebar.css" />
</head>
<body>
<!-- Fixed navbar -->
<div class="navbar navbar-static navbar-default navbar-fixed-top">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle toggle-left hidden-md hidden-lg" data-toggle="sidebar" data-target=".sidebar-left">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Project name</a>
</div>
<button type="button" class="navbar-toggle toggle-right" data-toggle="sidebar" data-target=".sidebar-right">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
</div>
<!-- Begin page content -->
<div class="container-fluid">
<div class="row">
<div class="col-xs-7 col-sm-3 col-md-3 sidebar sidebar-left sidebar-animate sidebar-md-show">
<ul class="nav navbar-stacked">
<li class="active">
<a href="#">Home</a>
</li>
<li>
<a href="#about">About</a>
</li>
<li>
<a href="#contact">Contact</a>
</li>
</ul>
</div>
<div class="main col-md-9 col-md-offset-3">
<div class="page-header">
<h1>Sticky footer with fixed navbar</h1>
</div>
<p class="lead">Pin a fixed-height footer to the bottom of the viewport in desktop browsers with this custom HTML and CSS. A fixed navbar has been added within <code>#wrap</code>
with <code>padding-top: 60px;</code>
on the <code>.container</code>
.</p>
<p>Back to <a href="../sticky-footer">the default sticky footer</a>
minus the navbar.</p>
</div>
<div class="col-xs-7 col-sm-3 col-md-3 sidebar sidebar-right sidebar-animate">
<ul class="nav navbar-stacked">
<li class="active">
<a href="#">Home</a>
</li>
<li>
<a href="#about">About</a>
</li>
<li>
<a href="#contact">Contact</a>
</li>
</ul>
</div>
</div>
</div>
</body>
</html>
/* Styles go here */
body {
padding-top: 51px;
}
/* this is only to style the sidebar - you can make the sidebar look any way you want */
.sidebar {
padding: 20px;
background-color: #f5f5f5;
border-right: 1px solid #eee;
}
/* ========================================================================
* Bootstrap: sidebar.js v0.1
* ========================================================================
* Copyright 2011-2014 Asyraf Abdul Rahman
* Licensed under MIT
* ======================================================================== */
+function ($) {
'use strict';
// SIDEBAR PUBLIC CLASS DEFINITION
// ================================
var Sidebar = function (element, options) {
this.$element = $(element)
this.options = $.extend({}, Sidebar.DEFAULTS, options)
this.transitioning = null
if (this.options.parent) this.$parent = $(this.options.parent)
if (this.options.toggle) this.toggle()
}
Sidebar.DEFAULTS = {
toggle: true
}
Sidebar.prototype.show = function () {
if (this.transitioning || this.$element.hasClass('sidebar-open')) return
var startEvent = $.Event('show.bs.sidebar')
this.$element.trigger(startEvent);
if (startEvent.isDefaultPrevented()) return
this.$element
.addClass('sidebar-open')
this.transitioning = 1
var complete = function () {
this.$element
this.transitioning = 0
this.$element.trigger('shown.bs.sidebar')
}
if(!$.support.transition) return complete.call(this)
this.$element
.one($.support.transition.end, $.proxy(complete, this))
.emulateTransitionEnd(400)
}
Sidebar.prototype.hide = function () {
if (this.transitioning || !this.$element.hasClass('sidebar-open')) return
var startEvent = $.Event('hide.bs.sidebar')
this.$element.trigger(startEvent)
if(startEvent.isDefaultPrevented()) return
this.$element
.removeClass('sidebar-open')
this.transitioning = 1
var complete = function () {
this.transitioning = 0
this.$element
.trigger('hidden.bs.sidebar')
}
if (!$.support.transition) return complete.call(this)
this.$element
.one($.support.transition.end, $.proxy(complete, this))
.emulateTransitionEnd(400)
}
Sidebar.prototype.toggle = function () {
this[this.$element.hasClass('sidebar-open') ? 'hide' : 'show']()
}
var old = $.fn.sidebar
$.fn.sidebar = function (option) {
return this.each(function (){
var $this = $(this)
var data = $this.data('bs.sidebar')
var options = $.extend({}, Sidebar.DEFAULTS, $this.data(), typeof options == 'object' && option)
if (!data && options.toggle && option == 'show') option = !option
if (!data) $this.data('bs.sidebar', (data = new Sidebar(this, options)))
if (typeof option == 'string') data[option]()
})
}
$.fn.sidebar.Constructor = Sidebar
$.fn.collapse.noConflict = function () {
$.fn.sidebar = old
return this
}
$(document).on('click.bs.sidebar.data-api', '[data-toggle="sidebar"]', function (e) {
var $this = $(this), href
var target = $this.attr('data-target')
|| e.preventDefault()
|| (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')
var $target = $(target)
var data = $target.data('bs.sidebar')
var option = data ? 'toggle' : $this.data()
$target.sidebar(option)
})
$('html').on('click.bs.sidebar.autohide', function(event){
var $this = $(event.target);
var isButtonOrSidebar = $this.is('.sidebar, [data-toggle="sidebar"]') || $this.parents('.sidebar, [data-toggle="sidebar"]').length;
if (isButtonOrSidebar) {
return;
} else {
var $target = $('.sidebar');
$target.each(function(i, trgt) {
var $trgt = $(trgt);
if($trgt.data('bs.sidebar') && $trgt.hasClass('sidebar-open')) {
$trgt.sidebar('hide');
}
})
}
});
}(jQuery);
/* All the default sidebar styles */
/* toggle button settings */
/* Note: this disables navbar-toggle class hide function. set visibility with the boostrap visible/hidden classes */
.navbar.navbar-static .navbar-header {
float: left;
}
.navbar .navbar-toggle.toggle-left {
float: left;
margin-left: 15px;
}
.navbar .navbar-toggle.toggle-right {
float: right;
margin-right: 15px;
}
.navbar .navbar-toggle.toggle-sidebar, [data-toggle="sidebar"] {
display: block;
}
/* sidebar settings */
.sidebar {
position: fixed;
display: block;
top: 51px;
bottom:0;
z-index: 1000;
min-height: 100%;
max-height: none;
overflow: auto;
}
.sidebar-left {
left: 0;
}
.sidebar-right {
right: 0;
}
/* css to override hiding the sidebar according to different screen sizes */
.row .sidebar.sidebar-left.sidebar-xs-show {
left: 0;
-webkit-transform: translate3d(0,0,0);
transform: translate3d(0,0,0);
-moz-transform: none;
}
/*right sidebar is untested */
.row .sidebar.sidebar-right.sidebar-xs-show {
right: 0;
-webkit-transform: translate3d(0,0,0);
transform: translate3d(0,0,0);
-moz-transform: none;
}
@media (min-width: 768px) {
.row .sidebar.sidebar-left.sidebar-sm-show {
left: 0;
-webkit-transform: translate3d(0,0,0);
transform: translate3d(0,0,0);
-moz-transform: none;
}
/*right sidebar is untested */
.row .sidebar.sidebar-right.sidebar-sm-show {
right: 0;
-webkit-transform: translate3d(0,0,0);
transform: translate3d(0,0,0);
-moz-transform: none;
}
}
@media (min-width: 992px) {
.row .sidebar.sidebar-left.sidebar-md-show {
left: 0;
-webkit-transform: translate3d(0,0,0);
transform: translate3d(0,0,0);
-moz-transform: none;
}
.row .sidebar.sidebar-right.sidebar-md-show {
right: 0;
-webkit-transform: translate3d(0,0,0);
transform: translate3d(0,0,0);
-moz-transform: none;
}
}
@media (min-width: 1170px) {
.row .sidebar.sidebar-left.sidebar-lg-show {
left: 0;
-webkit-transform: translate3d(0,0,0);
transform: translate3d(0,0,0);
-moz-transform: none;
}
.row .sidebar.sidebar-right.sidebar-lg-show {
right: 0;
-webkit-transform: translate3d(0,0,0);
transform: translate3d(0,0,0);
-moz-transform: none;
}
}
/* animation class - optional: without it the sidebar would just pop in and out*/
.sidebar-animate {
-webkit-transition: -webkit-transform 300ms ease;
-moz-transition: -moz-transform 300ms ease;
transition: transform 300ms ease;
}
/* Left panel positioning classes */
.sidebar.sidebar-left {
-webkit-transform: translate3d(-100%,0,0);
-moz-transform: translate3d(-100%,0,0);
transform: translate3d(-100%,0,0);
}
.sidebar.sidebar-left.sidebar-open {
-webkit-transform: translate3d(0,0,0);
transform: translate3d(0,0,0);
-moz-transform: none;
}
/* TODO: TEST THIS! Right panel positioning classes*/
.sidebar.sidebar-right {
-webkit-transform: translate3d(100%,0,0);
-moz-transform: translate3d(100%,0,0);
transform: translate3d(100%,0,0);
}
.sidebar.sidebar-right.sidebar-open {
-webkit-transform: translate3d(0,0,0);
transform: translate3d(0,0,0);
-moz-transform: none;
}