3D Interactive Fullscreen Navigation With jQuery And CSS3
| File Size: | 3.06 KB |
|---|---|
| Views Total: | 3246 |
| Last Update: | |
| Publish Date: | |
| Official Website: | Go to website |
| License: | MIT |
A 3D interactive fullscreen hamburger navigation concept that automatically rotates & flips menu on mouse move using CSS3 3D transforms. Clicking on the menu links will automatically switch between page sections without refreshing the current page.
How to use it:
1. Create the navigation menu.
<div class="wrapper">
<nav role="navigation">
<div class="elem" style="transform: perspective(1000px) rotateY(0deg) rotateX(0deg);">
<ul>
<li name="home"><a href="#">Home</a></li>
<li name="about"><a href="#">About</a></li>
<li name="blog"><a href="#">Blog</a></li>
<li name="contact"><a href="#">Contact</a></li>
<li name="contact"><a href="#">jQueryScript</a></li>
</ul>
</div>
</nav>
</div>
2. Create a button to toggle the fullscreen navigation.
<button class="menu"> <span></span> </button>
3. Create your own page sections you want to switch between.
<div class="section-wrap">
<section class="page home active">
<div class="vertical-align">
<div class="wrap">
<h2>Home Page</h2>
</div>
</div>
</section>
<section class="page about">
<div class="vertical-align">
<div class="wrap">
<h2>About Page</h2>
</div>
</div>
</section>
...
</div>
4. The main CSS styles for the fullscreen navigation.
nav {
position: fixed;
width: 100%;
top: 0;
left: 0;
right: 0;
margin: 0 auto;
width: 100%;
text-align: center;
height: 100vh;
z-index: 2;
display: none;
perspective: 1000px;
transform-style: preserve-3d;
-webkit-transform-style: preserve-3d;
cursor: pointer;
}
nav ul {
position: absolute;
top: 0;
right: 0;
left: 0;
margin: auto;
width: 300px;
height: 360px;
transform: rotateX(180deg) scale(0);
-webkit-transform: rotateX(180deg) scale(0);
transform-origin: top;
opacity: 0;
transform-style: preserve-3d;
-webkit-transform-style: preserve-3d;
transition: 1s all ease-in-out 0s;
-webkit-transition: 1s all ease-in-out 0s;
}
nav ul.active {
transform: rotateX(0deg) scale(1.6);
-webkit-transform: rotateX(0deg) scale(1.6);
opacity: 1;
transform-origin: top;
transform-style: preserve-3d;
-webkit-transform-style: preserve-3d;
transition: 1s all ease-in-out 0.5s;
-webkit-transition: 1s all ease-in-out 0.5s;
}
nav ul li { margin: 20px 0; }
nav ul li a {
color: #fff;
font-size: 48px;
}
.menu {
display: block;
position: absolute;
top: 30px;
left: 0;
right: 0;
margin: 0 auto;
height: 25px;
width: 40px;
background: transparent;
border: none;
outline: none;
cursor: pointer;
z-index: 3;
}
.menu:before {
content: "MENU";
position: absolute;
bottom: -20px;
left: 0;
right: 0;
margin: 0 auto;
color: rgba(255,255,255,0.5);
font-size: 10px;
letter-spacing: 1px;
}
.menu.active:before {
content: "CLOSE";
position: absolute;
bottom: -20px;
left: 0;
right: 0;
margin: 0 auto;
color: rgba(255,255,255,0.5);
font-size: 10px;
letter-spacing: 1px;
}
.menu span {
height: 2px;
background: #fff;
display: block;
width: 100%;
position: absolute;
top: 0;
bottom: 0;
margin: auto;
transition: 0.2s all ease-in-out;
-webkit-transition: 0.2s all ease-in-out;
}
.menu span:after, .menu span:before {
content: "";
height: 2px;
background: #fff;
display: block;
width: 100%;
position: absolute;
transition: 0.2s top ease-in-out 0.2s, transform 0.2s ease-in-out;
-webkit-transition: 0.2s top ease-in-out 0.2s, transform 0.2s ease-in-out;
}
.menu span:after { top: -10px; }
.menu span:before { top: 10px; }
.menu.active span { background: transparent; }
.menu.active span:before, .menu.active span:after {
transition: 0.2s top ease-in-out, transform 0.2s ease-in-out 0.2s;
-webkit-transition: 0.2s top ease-in-out, transform 0.2s ease-in-out 0.2s;
}
.menu.active span:after {
top: 0;
transform: rotate(45deg);
}
.menu.active span:before {
top: 0;
transform: rotate(-45deg);
}
5. The other required CSS styles.
.wrapper {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
margin: auto;
transition: 0.8s transform ease-in-out;
-webkit-transition: 0.8s transform ease-in-out;
transform: scale(0.5);
-webkit-transform: scale(0.5);
z-index: 2;
}
.page {
height: 100vh;
width: 100vw;
background: #323232;
opacity: 0;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto;
}
.page.active { opacity: 1; }
.vertical-align {
position: relative;
height: 160px;
top: 50%;
transform: translateY(-50%);
transition: 0.2s all ease-in-out;
-webkit-transition: 0.2s all ease-in-out;
}
.wrap {
width: 60%;
margin: 0 auto;
text-align: center;
transition: 0.2s all ease-in-out;
-webkit-transition: 0.2s all ease-in-out;
}
.page .wrap p {
font-size: 18px;
margin: 20px auto;
width: 70%;
opacity: .5;
letter-spacing: 1px;
}
.section-wrap {
height: 100vh;
width: 100vw;
position: relative;
transform-style: preserve-3d;
perspective: 1000px;
transition: 0.8s all ease-in-out;
-webkit-transition: 0.8s all ease-in-out;
overflow: hidden;
opacity: 1;
}
.section-wrap.active {
opacity: 0.2;
transform: scale(0.5);
-webkit-transform: scale(0.5);
}
section.active { transform: rotateX(0deg); }
6. Insert the necessary jQuery plugin into the document.
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
7. The main JavaScript to activate the fullscreen navigation.
$('.menu, nav').click(function(){
if ($('.menu').hasClass('active')) {
$('nav ul').removeClass('active');
$('nav').delay(800).fadeOut('slow');
setTimeout(function() {
$('.menu').removeClass('active');
$('.section-wrap').removeClass('active');
}, 800);
} else {
$('.menu').addClass('active');
$('nav').fadeIn('slow');
$('nav').addClass('active');
$('nav ul').addClass('active');
$('.section-wrap').addClass('active');
}
});
8. Add a 3D interactive effect to the navigation.
!(function ($doc, $win) {
var screenWidth = $win.screen.width / 2,
screenHeight = $win.screen.height / 2,
$elems = $doc.getElementsByClassName("elem"),
validPropertyPrefix = '',
otherProperty = 'perspective(1000px)',
elemStyle = $elems[0].style;
if(typeof elemStyle.webkitTransform == 'string') {
validPropertyPrefix = 'webkitTransform';
} else if (typeof elemStyle.MozTransform == 'string') {
validPropertyPrefix = 'MozTransform';
}
$doc.addEventListener('mousemove', function (e) {
var centroX = e.clientX - screenWidth,
centroY = screenHeight - (e.clientY + 13),
degX = centroX * 0.04,
degY = centroY * 0.01,
$elem
for (var i = 0; i < $elems.length; i++) {
$elem = $elems[i];
$elem.style[validPropertyPrefix] = otherProperty + 'rotateY('+ degX +'deg) rotateX('+ degY +'deg)';
};
});
})(document, window);
9. Enable the nav links to switch between page section when clicked.
$('nav ul li').on('click', function(){
var elementName = $(this).attr('name');
$('.page.active').fadeOut(800).removeClass('active');
$('.page.'+elementName).delay(1000).fadeIn(1000).addClass('active');
});
This awesome jQuery plugin is developed by Thomas Podgrodzki. For more Advanced Usages, please check the demo page or visit the official website.











