Konumunu sabitleştiren menü (CSS/JS)

Kategori: Tasarım7.10.08(8)

Bu tasarımdaki ana menüye dikkat ederseniz, siz sayfayı aşağıya doğru ilerletince menünün de sayfayla beraber aşağıya doğru ilerlediğini göreceksiniz. Fakat ne vakit menü sayfanın en üstüne ulaşırsa, o vakit hareket etmeyi kesiyor ve olduğu yere, yani sayfanın en üstüne sabitleniyor. Deneyin ve görün. Siz sayfayı aşağıya doğru ilerletmeye devam etseniz de navigasyon hep sayfanın en üstünde sabit olarak konumlandığından dolayı sayfanın neresinde olursanız olun menü hep gözünüzün önünde oluyor. Fena değil, değil mi?

Aslında bu sistemi K2 teması kullanıyor. Ben de kodu oradan çıkarıp ihtiyaçlarıma göre düzenledim. Gelin size nasıl yapıldığını anlatayım.

081007-navigasyon

Çalışma şekli şu: Birkaç satırlık bir javascript kodu JQuery yardımıyla içeriğinizi barındıran div (burada #container diye adlandıralım) sayfanın en üst noktasına ulaştığında body’ye “smartposition” sınıfını ekliyor. Eğer #container tekrar gözle görünür hale gelirse “smartposition” sınıfı body’den çıkarılıyor. Siz de CSS üzerinden menünüze “smartposition” sınıfı eklendiğinde “position: fixed” komutunu atıyorsunuz. Herşey bundan ibaret.

1. JQuery’i indirin ve sayfanızdan çağırın

JQuery’i sitesi üzerinden indirin, web sitenizin bulunduğu klasöre atın ve sayfanızdan çağırın. Bunun dışında az sonra oluşturacağımız “rollingdiv.js” dosyasını da şimdiden çağırın:

<script src="scripts/jquery.js" type="text/javascript"><!--mce:0--></script>
<script src="scripts/rollingdiv.js" type="text/javascript"><!--mce:1--></script>

2. Rollingdiv.js

Herşey burada bitiyor. Yukarıda çağırmış olduğumuz rollingdiv.js isimli dosyayı ilgili klasörde oluşturun ve aşağıdaki kodu belgeye yapıştırın:

function smartPosition(obj) {
	if ( jQuery.browser.msie &amp;&amp; parseInt(jQuery.browser.version, 10) &lt; 7 ) {
		return;
	}
 
	jQuery(window).scroll(function() {
		// Detect if content is being scroll offscreen.
		if ( (document.documentElement.scrollTop || document.body.scrollTop) &gt;= jQuery(obj).offset().top) {
			jQuery('body').addClass('smartposition');
		} else {
			jQuery('body').removeClass('smartposition');
		}
	});
};

(Not: Kod K2 temasından alınmıştır.)

3. HTML belgesi

Şimdi de HTML belgemize aşağıdaki kodu yapıştırıyoruz:

<script type="text/javascript"><!--mce:2--></script>

Buradaki “#container” elementi yukarıya ulaştığında harekete geçilecek olan element oluyor. Bu adımla birlikte HTML ve JS bölümünü bitirmiş oluyoruz. Yani #container divimiz sayfanın tepesine ulaştığında sayfanın body’sine “smartposition” sınıfı eklenecek, son görüntü şu halde olacak;

 

CSS belgesi

Yapmamız gereken son şey CSS belgemizden “smartposition” sınıflı body’ye özel komutlar atamak. Bu adımda tamamen özgürsünüz; sayfanızın arkaplanının kırmızı olmasını da isteyebilirsiniz, navigasyonunuzun havada asılı kalmasını da. Bu örnekte isteğimiz ikinci şık olduğundan, CSS’imize aşağıdaki kodu eklememiz gerekiyor;

body.smartposition #navigation {
	position: fixed;
	z-index: 10;
}

Bitti bile! “position:fixed;” özelliği #navigation isimli alanın (div) veya listenin (ul, ol) havada asılı kalmasını sağlıyor. Tabii sadece “smartposition” sınıfı body’ye ekli olduğunda. Yani içerik alanımız (div#container) sayfanın tepesine ulaştığında…

Yukarıdaki kodu isteğinize göre değiştirebilirsiniz. Bunun temel mantığı anlatmaya yeteceğini düşünüyorum. Sorularınız, ek istekleriniz olursa yorum yazarak bana ulaşabilirsiniz.

Güncelleme – 07.10.08, 18:45

Bu yöntem IE6′da çalışmamaktadır. Çünkü IE6 ‘position: fixed;’ komunutu anlamamaktadır. Fakat bunu çözmek için birçok yöntem bulunuyor… Kısaca göz atmak yeterli.

Etiketler: , , , , ,

YORUMLAR

TOPLAM 8 YORUM.

Yorumlarınız değerlidir. Bu yazıyla ilgili düşüncelerinizi belirtebilir, yardım talebinde bulunabilirsiniz.

oceangray, (#) - 7.10.2008

güzel paylaşım..

Muhammet Sevim, (#) - 7.10.2008

Küçük bir ekleme yapayım: Bu yöntem IE6′da çalışmamaktadır. Çünkü IE6 ‘position: fixed;’ komunutu anlamamaktadır. Fakat bunu çözmek için birçok yöntem bulunuyor… Kısaca göz atmak yeterli.

Hsn, (#) - 19.10.2008

İçimden “Menü de ne güzelmiş” derken bu anlatımı gördüm mutlu oldum :) elinize sağlık.

Mustafa Ayan, (#) - 29.11.2008

Dostum çok saol. Bilgini paylaştığın için teşekkür ederim. Msn leri verelim istersen eğer sorun olmazsa işle ilgili ve öğrenme konusunda bilgi paylaşımı yapabiliriz.

Kadir GÜNAY, (#) - 13.1.2009

Merhaba Muhammet,
Gerçekten güzel bir paylaşım olmuş. Betik hem kullanışlı hem de göze hoş geliyor.

Zİya KARA, (#) - 20.2.2009

Çok güzel bir paylaşım ,ama anlatımı; konu hakkında az bilgisi olan kişiler için çokta açık değil…

Konuyu 3 bölümde anlatmışsın ve bu bölümler içinde kodları göstermişsin…
ben sadece CSS bölümünde anlattıklarını açık ve net anlayabildim ondan önceki bölümlerde yazılı olan kodları nereye ekleyeceğimizi anlayamadım
HTML den bahsettiğin kısımdaki kodları nerede oluşturacağız?

Ferhat İÇME, (#) - 6.3.2009

Paylaşımın için teşekkürler.

özer, (#) - 28.6.2009

çok hoş menü olmuş doğrusu, paylaşım için teşekkürler

Yorumunuzu ekleyin

E-posta adresiniz hiçbir zaman yayınlanmayacaktır. Temel HTML metin şekillendirilmesi izinlidir. Sadece bu konuyla ilgili yorum yapmayı unutmayınız. Teşekkürler :)