Membuat Fixed Menu Ketika Scroll Dengan CSS3, Jquery & HTML5

Kali ini tutorial-webdesign.com akan mencoba membuat menu yang posisinya selalu diatas (fixed) setelah halaman web di scroll, bukan hanya berada diatas, manu yang tadinya menyatu dengan halaman website ini akan berubah warna juga. Intinya disini kita akan belajar bagaimana menghapus dan menambah class pada tag html ketika menu di scroll dengan bantuan jquery.
Agak berbeda dengan yang kita buat sebelum nya di tutorial Membuat Menu Posisi Tetap dan Responsive dimana kita tidak membutuhkan javascript untuk itu, karena menunya sudah langsung kita letakan di bagian atas halaman website dengan CSS.

Untuk merubah bentuk menu seperti itu kita tentunya membutuhkan Javascript untuk mendapatkan event ketika mouse di scroll tersebut, kali ini kita menggunakan Jquery untuk praktek menghapus lalu menambahkan class dengan nama lain ketika website di scroll..

Oke langsung saja kita membuat struktur HTML nya, disini kita mencoba menggunakan tag-tag HTML5 untuk praktek.

Struktur HTML

<div>

	<header></header>

	<nav></nav>

	<section></section>
</div>

Kode diatas adalah truktur HTML kita secara singkat, selangkapnya akan dijabarkan dibawah ini masing-masing isi dari setiap bagian.

Header

Bagian header umumnya kita isi dengan Judul dan keterangan tentang website tersebut (tagline).

<header>
	<h1>Fixed Menu When Scroll</h1>
	<p><a href="http://www.tutorial-webdesign.com/fixed-menu-scroll-css-jquery-html5">http://www.tutorial-webdesign.com</a> | Image by : <a href="http://www.flickr.com/photos/thetruthabout/3396317853/sizes/m/in/photostream/" target="_blank">TheTruthAbout</a></p>
</header>

Navigation

Pada bagian ini adalah menu kita, simple saja, isinya hanya sebuah div yang didalam nya ada list menu (ul > li)

<nav>
	<div id="twd-menu">
		<ul>
			<li><a href="#">Home</a></li>
			<li><a href="#about">About</a></li>
			<li><a href="#services">Services</a></li>
			<li><a href="#portfolio">Portfolio</a></li>
			<li><a href="#contact">Contact</a></li>
		</ul>
	</div>
</nav>

Perlu diperhatikan disitu yaitu nama class dari div, yang diberi nama normal. Ini berguna untuk memberikan style utama sebelum di scroll.

Section / Konten website

Bagian ini berisi isi dari website yang kita buat, ada beberapa bagian dan kita beri setiap bagian sesuai dengan ID dari setiap menu (about, services, portfolio dan contact)

<section>
	<h2>Scroll me please... ↓</h2>
	<p><img src="http://farm4.staticflickr.com/3581/3396317853_e84a205773.jpg" alt=""> </p>

	<aside id="about">
		<h2>About</h2>
		<p>Content...</p>
	</aside>

	<aside id="services">
		<h2>Services</h2>
		<p>Content...</p>
	</aside>
	<aside id="portfolio">
		<h2>Portfolio</h2>
		<p>Content...</p>
	</aside>
	<aside id="contact">
		<h2>Contact</h2>
		<p>Content...</p>
	</aside>

</section>

Style CSS

Setelah kita selesai dengan struktur HTML yang akan dibuat, saat nya kita mulai mempercantik tampilan dengan menggunakan CSS, tidak ada css khusus yang kita perlukan karena ini hanya keperluan demo saja.

CSS Awal

ini digunakan untuk global atau keseluruhan, sebenarnya ini kurang lengkap, biasanya untuk global itu kita perlu normalize, css reset atau yang lain nya agar lebih baik, tapi ini hanya untuk demo saja.

/* Global
====================*/
*{
	padding: 0;
	margin: 0;
}
html{
	background: url(img/bg.png);
}
body{
	margin-top: 70px;
}
a{
	text-decoration: none;
	color: #333;
}

header, nav, section{
	width: 450px;
	margin: 0 auto 0px auto;
}

CSS untuk header

/* header
====================*/
header{
	padding: 10px 0;
}

CSS untuk Menu Normal

/* Menu
====================*/
#twd-menu{
	margin-bottom:20px;
}
.normal{
	padding: 10px;background: #B16B67;
}
#twd-menu ul{
	list-style-type: none;
	padding: 0;
}
	#twd-menu ul li{
		display: inline-block;
	}
		#twd-menu ul li a{
			display: inline-block;
			padding:10px;
			border-radius: 10px;
			color: #ddd;
		}
			#twd-menu ul li a:hover{
				background:black;
				color: #fff;
			}

CSS Menu ketika scroll

/* Menu When Scroll */
.fixed {
	position: fixed;
	top: -5px;
	left: 0;
	width: 100%;
	padding: 10px;
	background: #0B7271;
	color: #f8f8f8;
	-webkit-transition: top 400ms ease 0s;
	-moz-transition: top 400ms ease 0s;
	-o-transition: top 400ms ease 0s;
	-ms-transition: top 400ms ease 0s;
	transition: top 400ms ease 0s;
	box-shadow: 0 0 40px #222;
	-webkit-box-shadow: 0 0 40px #222;
	-moz-box-shadow: 0 0 40px #222;
}
.fixed ul{
	width: 450px;
	margin: 0 auto;
}

CSS untuk konten website

/* Content
=================*/
aside{
	padding: 50px 10px;
}
aside h2{
	margin: 20px 0;
}

Seperti itulah urutan css yang kita buat. Lanjut dengan Javascript

Javascript

Untuk dapat merubah class .normal menjadi .fixed, agar tampilan menu berubah kita membutuhkan Javascript, disini kita sebelum nya talah menyisipkan Jquery tentunya dibagian head dan /head.
Lalu kita membuat sebuah file javascript dengan nama twd-menu.js dengan isi seperti dibawah ini.

$(function(){

	var menu = $('#twd-menu'),
		pos = menu.offset();

		$(window).scroll(function(){
			if($(this).scrollTop() > pos.top+menu.height() && menu.hasClass('normal')){
				menu.fadeOut('fast', function(){
					$(this).removeClass('normal').addClass('fixed').fadeIn('fast');
				});
			} else if($(this).scrollTop() <= pos.top && menu.hasClass('fixed')){
				menu.fadeOut('fast', function(){
					$(this).removeClass('fixed').addClass('normal').fadeIn('fast');
				});
			}
		});

});

Bisa dilihat disitu kita kita pertama akan menghapus class normal, lalu menambahkan class fixed, jadi ketika class normal dihapus tentunya style yang kita tulis di css untuk class .normal tidak berguna lagi, yang terpakai adalah kode css untuk class .fixed, dimana isinya position:fixed untuk membuat posisi tidak berubah dan width:100% agar lebarnya memenuhi layar monitor.

Hasil

Berikut adalah hasil yang telah dibuat, anda bisa melihat dan mendownload kode nya dari Github.

Perlu diketahui ini hanya untuk keperluan demo, jadi tidak semua bagian kami percantik dengan CSS.

DEMO | Download Code

Sekian

Oke sekian tutorial kali ini, semoga berguna untuk memulai pekerjaan anda.

Sumber

Leave a comment