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.

İlgili Yazılar:

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.

43 Yorum (Yorum Ekle)

  • enes diyor ki:

    “bilmeyen” biri bilginin teknik olup olmadığına nasıl karar veriyor onu merak ettim ben

    css ile ilgili daha yalın bir anlatım yok arkadaşım, gerçekten

  • fatih.hayrioglu diyor ki:

    Can ım arkadaşım css derslerini sırası ile izlersen bu konunun Gelişmiş CSS dersleri kısmında olduğunu göreceksin. Bu konuyu anlaya bilmek için biraz teknik bilgiye sahip olman gerekiyor.

  • Can diyor ki:

    Ya siz bu dersleri bilmeyenlere öğretmek için anlatmıyormusunuz? Neden bu kadar teknik konuşup aklımızı karıştırıyorsunuz ki? Öğretiyorsan herşeyi ince ayrıntısına kadar öğret bu kadar teknik olmaya gerek yok! Emeğin için saol

  • yusuf diyor ki:

    selamlar fatih bey.size teşekkür etmek istedim.ben bu sene bilg. prog dan mezun oldum we web tasrımcığını seçtim tek eksiğim css di we uygun kaynağı kitaplarda dahi bulamadım.çok detaylı ve güzel anlatmışsınız.tekrar teşekkürler.

  • fatih.hayrioglu diyor ki:

    ie7 den önceki versiyonlardaa geçişlerde bazen bu tip ufak beklemeler olsada buna hata demek pek mümkün değil.

  • astar78a diyor ki:

    hocam sorundan kastım butonun üstüne geldiğimizde butonun resim değiştirmesi esnasında i.e de geçişlerde resimde bi anlık kaybolma olması

  • fatih.hayrioglu diyor ki:

    ie5.5, ie6 ve ie7 de sorun yok.

  • astar78a diyor ki:

    Hocam güzel olmuş bayağı emek verilmiş eline sağlık. Soruma gelince bu resimli butonlara i.e de bildiğiniz gibi sorunlu çalışıyo . Bildiğiniz bi çaresi varmı ?

  • fatih.hayrioglu diyor ki:

    Evet bahsettiğin şekliyle menü oluşturulabilir.

    Makalede de bahsettiğim gib bir çok teknik mevcut.

    Her tekniğin kendine göre avantajları ve dez avantajları var.

    Bu tekniği seçmemin nedeni bir çok kullanım şekli ve yeri için sorunsuz çalışması.

    Verdiğiniz bilgiler ve katkılardan dolayı çok teşekkürler.

  • Volkan Altınbaş diyor ki:

    Merhaba Fatih

    Sitenle fazla uzun süre olmadı tanışalı ama uzun süredir css ile uğraşan biri olarak yeni başlayan arkadaşlar için çok iyi bir kaynak oluşturduğun kanaatindeyim. Bunun için seni tebrik ederim. şžimdi gelelim konumuza.

    li elementine absolute değeri vermiş ve daha sonra her bir menu elementi için (elma, armut vs..) soldan menüyü konumlandırmak için ayrıca bir tanımlama yapmışsın. şžu şekilde olsa daha doğru ve az kodla işi bitirmiş olmazmıydık.

    1. ul#menu li {
    2. list-style: none;
    3. position: absolute;
    4. }

    yerine

    1. ul#menu li {
    2. float:left;
    3. list-style: none;
    4. }

    bu işlemden sonra her bir a elementi için ayrı ayrı genişlik verdiğin için

    #elma a:hover{
    width:130px;
    vs..}

    soldan konumlandırmak için tanımlamış olduğun

    1. #elma {left: 0px;}
    2. #armut {left: 130px;}
    3. #muz {left: 272px;}
    4. #kivi {left: 392px;}

    kodlarıda menümüzden kaldırabilir ve menümüzü bu şekildede senin hazırlamış olduğun ile aynı biçimde kullanabiliriz. Sanırım benim şu anda buraya yazdığım gibi menüyü hazırlamanın sebebi tüm browserlar içindeki css uyuşmazlıklarını minumuma indirmeye çalışman.

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>

?