Facebook-like mobile navigation
HTML
<div id="wrapper">
<header>
<button id="panel-toggle">Toggle</button>
</header>
<div id="panel">
<section>
<h1>First section</h1>
<ul>
<li><a href="#">item 1</a></li>
<li><a href="#">item 2</a></li>
<li><a href="#">item 3</a></li>
</ul>
</section>
<section>
<h1>Second section</h1>
<ul>
<li><a href="#">item 4</a></li>
<li><a href="#">item 5</a></li>
<li><a href="#">item 6</a></li>
</ul>
</section>
<section>
<h1>Third section</h1>
<ul>
<li><a href="#">item 7</a></li>
<li><a href="#">item 8</a></li>
<li><a href="#">item 9</a></li>
</ul>
</section>
<section>
<h1>Third section</h1>
<ul>
<li><a href="#">item 7</a></li>
<li><a href="#">item 8</a></li>
<li><a href="#">item 9</a></li>
</ul>
</section>
<section>
<h1>Third section</h1>
<ul>
<li><a href="#">item 7</a></li>
<li><a href="#">item 8</a></li>
<li><a href="#">item 9</a></li>
</ul>
</section>
<section>
<h1>Third section</h1>
<ul>
<li><a href="#">item 7</a></li>
<li><a href="#">item 8</a></li>
<li><a href="#">item 9</a></li>
</ul>
</section>
</div>
<section id="content">
<h1>Here comes the content</h1>
<p class="description">Lorem ipsum dolor sit amet,...
CSS
html,
body {
height: 100%;
padding: 0;
margin: 0;
}
body {
font-family: sans-serif;
}
#wrapper {
position: relative;
width: 100%;
min-height: 100%;
background: #ccc;
}
#wrapper > header:first-of-type {
background: #777;
display: block;
width: 100%;
position: relative;
z-index: 1;
padding: .2em 0;
margin-right: 0;
position: fixed;
-webkit-transition: margin-left 0.2s ease-out;
-moz-transition: margin-left 0.2s ease-out;
-o-transition: margin-left 0.2s ease-out;
-ms-transition: margin-left 0.2s ease-out;
transition: margin-left 0.2s ease-out;
}
#panel {
width: 87%;
padding: 0 0 1em;
margin: 0;
position: absolute;
height: 100%;
background: #ccc;
z-index: 0;
top: 0;
left: 0;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
}
#content {
width: 100%;
margin-left: 0;
position: relative;
background: white;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
-webkit-transition: margin-left 0.2s ease-out;
-moz-transition: margin-left 0.2s ease-out;
-o-transition: margin-left 0.2s ease-out;
-ms-transition: margin-left 0.2s ease-out;
transition: margin-left 0.2s ease-out;
padding: 4em 1em 1em;
}
.shifted #content,
.shifted > header {
margin-left: 87%;
}
.shifted #content {
position: fixed;
-webkit-box-shadow: -2px 0 0.5em rgba(0, 0, 0, 0.5);
-moz-box-shadow: -2px 0 0.5em rgba(0, 0, 0, 0.5);
box-shadow: -2px 0 0.5em rgba(0, 0, 0, 0.5);
}
.shifted #panel {
overflow: scroll;
-webkit-overflow-scrolling: touch;
}
#content h1 {
font-size: 1.5em;
font-weight: bold;
}
#panel h1 {
font-size: 1em;
text-transform: uppercase;
font-weight: bold;
background: #999;
margin-top: 0;
}
#panel-toggle {
display: inline-block;
position: relative;
min-height: 38px;
width: 12%;
margin-left: 1%;
text-indent: 200%;
overflow: hidden;
border:...
JavaScript
/*globals alert:false, console:false*/
$(function () {
var contentOff = 0, panelOff = 0;
$('#panel-toggle').click(function (e) {
var $wrapper = $('#wrapper'),
$content = $('#content'),
$panel = $('#panel');
if (!$wrapper.hasClass('shifted')) {
contentOff = window.scrollY;
$wrapper.addClass('shifted');
$panel.scrollTop(panelOff);
$content.css('top', '-' + contentOff + 'px');
} else {
panelOff = $panel.scrollTop();
$wrapper.removeClass('shifted');
$content.removeAttr('style');
$(window).scrollTop(contentOff);
}
e.preventDefault();
});
});