Navigation Menu With Smooth Scroll
by Venkatesh Dematti
HTML
<header>
<nav>
<div id="brand">
<div id="logo"></div>
<div id="word-mark"></div>
</div>
<div id="menu">
<div id="menu-toggle">
<div id="menu-icon">
<div class="bar"></div>
<div class="bar"></div>
<div class="bar"></div>
</div>
</div>
<ul>
<li><a href="#section00"></a></li>
<li><a href="#section01"></a></li>
<li><a href="#section02"></a></li>
<li><a href="#section03"></a></li>
</ul>
</div>
</nav>
<div id="hero-section">
<div id="head-line"></div>
</div>
</header>
<section id="section00">
<div id="heading"></div>
</section>
<section id="section01">
<div id="heading"></div>
</section>
<section id="section02">
<div id="heading"></div>
</section>
<section id="section03">
<div id="heading"></div>
</section><a href="https://youtu.be/m1IU7zjl1k4" id="youtube"><i class="fa fa-youtube-play"></i></a>
CSS
/*** Mixins & Default Styles ***/
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
body {
overflow-x: hidden;
overflow-y: scroll;
}
/*** Color Variables ***/
/*** Centering Hack ***/
/*** Header Styles ***/
header {
width: 100vw;
height: 100vh;
background: #5661f2;
display: flex;
}
/*** Navigation Styles ***/
nav {
width: 100vw;
height: 160px;
background: #46b2f0;
display: grid;
grid-template-columns: 1fr 1fr;
position: fixed;
z-index: 10;
transition: all 0.3s;
}
nav.navShadow {
box-shadow: 0 4px 30px -5px rgba(0, 0, 0, 0.2);
height: 100px;
}
nav.navShadow #word-mark {
opacity: 0;
}
#brand,
#menu,
ul {
display: flex;
align-items: center;
}
#brand {
padding-left: 40px;
}
#logo {
width: 55px;
height: 55px;
background: #fff;
border-radius: 50%;
cursor: pointer;
}
#word-mark {
width: 120px;
height: 20px;
background: #fff;
border-radius: 90px;
margin-left: 20px;
opacity: 1;
transition: all 0.3s;
}
/*** Menu Styles ***/
#menu {
justify-content: flex-end;
padding-right: 40px;
}
li {
margin-left: 20px;
}
li a {
width: 80px;
height: 20px;
background: #fff;
display: block;
border-radius: 90px;
}
#menu-toggle {
width: 55px;
height: 55px;
background: #2ea8ee;
display: flex;
justify-content: center;
align-items: center;
border-radius: 50%;
cursor: pointer;
display: none;
}
#menu-toggle:hover .bar {
width: 25px;
}
#menu-toggle.closeMenu .bar {
width: 25px;
}
#menu-toggle.closeMenu .bar:first-child {
-webkit-transform: translateY(7px) rotate(45deg);
transform: translateY(7px) rotate(45deg);
}
#menu-toggle.closeMenu .bar:nth-child(2) {
-webkit-transform: scale(0);
transform: scale(0);
}
#menu-toggle.closeMenu .bar:last-child {
-webkit-transform: translateY(-7px) rotate(-45deg);
transform: translateY(-7px) rotate(-45deg);
}
.bar {
width: 25px;
height: 2px;
background: #fff;
transition: 0.3s...
JavaScript
/*Link to url
https://codepen.io/prvnbist/pen/GQMPZq
*/
$( () => {
//On Scroll Functionality
$(window).scroll( () => {
var windowTop = $(window).scrollTop();
windowTop > 100 ? $('nav').addClass('navShadow') : $('nav').removeClass('navShadow');
windowTop > 100 ? $('ul').css('top','100px') : $('ul').css('top','160px');
});
//Click Logo To Scroll To Top
$('#logo').on('click', () => {
$('html,body').animate({
scrollTop: 0
},500);
});
//Smooth Scrolling Using Navigation Menu
$('a[href*="#"]').on('click', function(e){
$('html,body').animate({
scrollTop: $($(this).attr('href')).offset().top - 100
},500);
e.preventDefault();
});
//Toggle Menu
$('#menu-toggle').on('click', () => {
$('#menu-toggle').toggleClass('closeMenu');
$('ul').toggleClass('showMenu');
$('li').on('click', () => {
$('ul').removeClass('showMenu');
$('#menu-toggle').removeClass('closeMenu');
});
});
});