CSS ile Menü Oluşturmak V – Resimli Menüler

"Arkaplan Resmi kaydırmaca" ile Resimli Menüler

Arkaplan Resmi kaydırmaca tanımlamasını cemsid‘den aldım. CSS ile menü yapımı serimize devam ediyoruz. CSS ile yapılan bir çok menü örneği mevcut biz burada bunları katagorize edip her bir katagoriye bir örnek yaparak mantığını anlatmaya çalıyoruz, mantığını anladıktan sonra CSS ile yapılan tüm menüleri yapabileceğimize inanıyorum.

CSS menülerinin vazgeçilmezi sırasız listeleri(<ul>) kullanarak her bir linkin iki resimi bulunan(bir normal hali, diğeri fare imlecinin üzerine gelince görünecek resim) menü oluşturacağız.

Bu menü sayfa yüklenmeden yüklendiği için javascript ile yapılan rollover menülerden avantajlıdır ve Internet Explorer’da Temporary Internet Files > Settings > ‘Every visit to page.’ seçeneği seçili olan kullanıcılar için biçilmiş kaftandır. Ayrıca CSS ile yapılan menülerdeki avantajlara(kolay ekleme ve düzenleme, esnek yapı vb.) sahiptir tabi ki.

Bu metod cemsid’inde açıkladığı gibi arkaplan resmi(background-image) kaydırarak yapılıyor. Genelde bu tip menüler resim içeren veya anti-aliased metinlerin kullanıldığı durumlarda kullanılır.

<ul id="menu" >
<li id="elma"><a href="#" title="Elma">Elma</a></li>
<li id="armut"><a href="#" title="Armut">Armut</a></li>
<li id="muz"><a href="#" title="Muz">Muz</a></li>
<li id="kivi"><a href="#" title="Kivi">Kivi</a></li>
</ul>

Görüldüğü gibi diğer menü başlangıcından farkı olmayan-bir ek hariç- bir kodlama. Hariç olan ek her menu elemanına bir id atamamız. Çünkü her menü elemanı için bir resim tanımlaması yapacağız. Manav dükkanı açıyoruz :)

şžimdi menümüzü oluşturan resimi hazırlamaya geldi sıra. Menü resmini oluştururken bir normal halini ve hemen altına fare imleci üzerine geldiğindeki halini koyup resmi kaydedeceğiz. Bu işlem için Photosohop, Firefowrk, PaintShopPro vb. programlar kullanabilrisiniz.

Menüdeki margin, padding ve imgeleri kaldıralım. Boyutlarını ve konumunu tanımlayalım:

ul#menu {
    height: 54px;
    width: 500px;
    margin: 0;
    padding: 0;
    position: relative;
}

Menümüzü yatay olarak sıralamak için

ul#menu li {
    list-style: none;
    position: absolute;
}

Menü elemanlarının yükseklikleri sabit olduğu için hepsine ortak tanımlama yapıyoruz, hepsini kendine has kapsama alanı olması için blokladık(display:block) ve konumlandırdık(postion:relative).

ul#menu li a {
    height: 54px;
    display: block;
    position:relative;
}

Her menü elemanı için kendi genişliği ve arkaplan resmindeki(menu.jpg) yerini belirleyelim.

#elma a{
    width:130px;
    background: url(images/menu.jpg) 0 0 no-repeat;
}
#armut a{
    width:142px;
    background: url(images/menu.jpg) -130px 0 no-repeat;
}
#muz a{
    width:120px;
    background: url(images/menu.jpg) -272px 0 no-repeat;
}
#kivi a{
    width:108px;
    background: url(images/menu.jpg) -392px 0 no-repeat;
}

ve tüm menü elementlerinin soldan konumu belirleyelim.

#elma {left: 0px;}
#armut {left: 130px;}
#muz {left: 272px;}
#kivi {left: 392px;}

Resimler üzerindeki metinleri kaldırmak için

ul#menu li a {
    text-indent: -9999px;
    text-decoration: none;
}

Menümüz tamam. şžimdi de rollover efekti vermek için a:hover arkaplan resimlerinin konumunu belirleyelim. Konumunu yazarken sadece yükseliği üstten konumu değiştirdiğimize dikkat edin.

#elma a:hover{
    width:130px;
    background: url(images/menu.jpg) 0 -54px no-repeat;
}
#armut a:hover{
    width:142px;
    background: url(images/menu.jpg) -130px -54px no-repeat;
}
#muz a:hover{
    width:120px;
    background: url(images/menu.jpg) -272px -54px no-repeat;
}
#kivi a:hover{
    width:108px;
    background: url(images/menu.jpg) -392px -54px no-repeat;
}

Son olarakta bir bölümde olduğunda o bölümün aktif görünmesini sağlamak için, genel de bunu için a:hover durumu normal durum olarak tanımlanır. Bizde öyle yapalım. Mesela Muz bölümünde olduğumuzu farz edelim.

<ul id="menu" >
    <li id="elma"><a href="#" title="Elma">Elma</a></li>
    <li id="armut"><a href="#" title="Armut">Armut</a></li>
    <li id="muz"><a href="#" title="Muz" class="secili" >Muz</a></li>
    <li id="kivi"><a href="#" title="Kivi">Kivi</a></li>
</ul>
#elma a.secili{
    width:130px;
    background: url(images/menu.jpg) 0 -54px no-repeat;
}
#armut a.secili{
    width:142px;
    background: url(images/menu.jpg) -130px -54px no-repeat;
}
#muz a.secili{
    width:120px;
    background: url(images/menu.jpg) -272px -54px no-repeat;
}
#kivi a.secili{
    width:108px;
    background: url(images/menu.jpg) -392px -54px no-repeat;
}

Örnek kodları indirmek için tıklayınız.

This website uses IntenseDebate comments, but they are not currently loaded because either your browser doesn't support JavaScript, or they didn't load fast enough.

45 Yorum (Yorum Ekle)

  • Baran Taşcı diyor ki:

    İyi günler,

    CSS ile ilgilenmeye başlayalı 2-3 gün oluyor. Menüyü başarılı bir şekilde oluşturmayı başardım dreamweaver’da fakat bir şey sormak istiyorum. Yatayda sayfanın ortasına yerleştirmeyi başaramadım. Sizin örneğinizdeki gibi sayfanın sol tarafına yapışık duruyor. yatayda sayfayı nasıl ortalatabilirim acaba? Bir de çok uzun değil ise her bir resime nasıl link atayabileceğimi söylerseniz sevinirim.

    Kolay gelsin.

  • prosperity diyor ki:

    Çok sağolun hocam.. Sayenizde flash kullanmadan hareketli bir menü oluşturdum.. iyiki varsınız..

  • fatih.hayrioglu diyor ki:

    @prosperity buradaki yöntemin adı ardalan kaydırmaca, bu adın verlmesinin nedeni atadığımız ardalan resminin ki bu normal ve hover hallerini içeren tek bir resimdir. Hover halinde görünecek kısmın bu tek resimdeki yerini belirtmek için kullandığmız yataydaki mesafedir. Yani resmin solundan -130px üsttende -54px mesafe ede olduğu için bu değerleri verdik. Tüm menü elemanları için bu hesaplamları aynı şekilde yapıyoruz

  • prosperity diyor ki:

    Çok garip bir soru olacak belki ama içinden çıkamadım..
    background: url(images/menu.jpg) -130px 0 no-repeat;

    buralardaki örneğin -130 bu ölçüyü neye göre belirliyoruz..

  • Taner Hepsen diyor ki:

    Merhaba fatih abi benim yatay ve dkey açılır menuler haırlmama gerekıyor CSS kodları ıle ve ben kendım yapıp arka planada resım koymak ıstıyorum bu konuda bana yardım edersenız sevınırım

  • fatih.hayrioglu diyor ki:

    @gökhan pur

    yaptığın bir örneği görebilirmiyim?

  • gökhan pur diyor ki:

    onu örnek olarak vermiştim bg olduğunda malum background-position ile çözeriz ama eğer kullandığım buton direk img ise hover olayını bu sefer margin veya top ile çözmeyi düşündüm buda ie6 da çalışmadı. ie6 fake yapabilirmiyiz gibisinden sordum :)

  • fatih.hayrioglu diyor ki:

    @gökhan pur

    yöntemi anladımda direk resim kullanmayı anlayamadım. Direk resim kullanırsak background-position nasıl ayarlayacağız. Zaten üstte resim var.

    Resimi saydam mı yapacağız?

  • gökhan pur diyor ki:

    burda backgroun olarak değilde, butonları direk image buton olarak eklediğimizi düşünelim.

  • gibi burdaki image in ben 32px lik kısmını gösteriyorum (ul height:32px; overflow:hidden;) ve resmin üzerine gelindiğinde.. resmin background-position:-32px değilde top-32px veya margin-top:-32px olarak yukarı kaymasını istiyorum. bu durumda tüm tarayıcılarda test ettim. sadece ie6 da tepkisiz kaldı diğerlerinde (ff, opera, safari, ie7 ) çalıştı. burdaki amacım her bg ve li ye vereceğim class tan kaçmak ve farklı bişiler yapma çabası. bu konuda sıkıntı ile ilgili farklı metodlarda çözümleri olanlar varsa js hariç. tekparça img üzerinde hover çalıştıran ie6 da şimdiden teşekkürler.

  • borges diyor ki:

    hacı abi,uğraşacaksın,gündüz başlayacaksın araya gece girecek tekrar gündüzle buluşacaksın,gözlerin kıpkırmızı,beynin hoşaf olacak,tırmalayacaksın yani.Fatih üstadın sitesi bildiğim kadarı ile Türkiye’de tek.bilmediğimizi buradan sormamız,teşekkür edip revrans ile sabahın ilk ışıkları ile işe yada yatağa gitmemiz gerekir diye düşünüyorum.

  • Yorum yaz

    Format: Yorum içinde kullanılabilecek HTML kodları: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

    ?