Menumuzde CSS Var
14 Mart 2005
Websitelerinin degismez ogelerinden biri de link menuleridir. Bircok website, bu menuleri daha da ilginc bir gorsel yapiya sokmak icin web tasariminda "roll-over" adini verdigimiz efektler kullanir. Bu Roll-Over efektini gerceklestirmek icin bircok websitesi JavaScript ve grafik kullanirlar. Halbuki ayni efekti saglamak icin CSS kullanabilirsiniz. Bu sayede, hem siteniz JavaScript’e bagimli kalmaz hem de daha da erisilir bir hale gelir.
Size, CSS ile roll-over efektinin nasil pisirilecegini ogretmeye calisacagim bu yazida.
Bu tarif icin gerekli malzemeler:
- 2 vazifeli grafik (istege bagli)
- 3 parca CSS kodu
- 1 tutam HTML listesi
Iki vazifeli grafik, bizim, bir resim ile iki kus vurmamizi saglayacak. Boylece roll-over yaratmak icin "on" ve "off" diye iki tane resime gerek kalmayacak. Benim bu ornekte kullanacagim resim asagida gorulmektedir:
Yukarida gordugunuz gibi, bir grafik icinde, hem "off" grafigi, hem de "on" grafigi mevcut. Onemli nokta bu grafiklerin boyutlarinin ayni olmasi ve bu grafikleri iceren ana grafigin (yukarida goruldugu gibi) yuksekliginin, bu iki grafigin yuksekliklerinin toplamina esit olmasi.
Grafigimiz hazir. Simdi menuyu olusturacak HTML’i yazmaya baslayabiliriz. Ben, menu icin HTML 4.01 icinde mevcut olan <ol> elementini kullanacagim. <ol>'in <ul> den tek farki, <ul>'nin sirasiz liste; <ol>'nin ise sirali liste olusturmasi. Eger bir menunun, siralanmis bir liste oldugunu dusunursek, <ol> gibi bir HTML elementinin bu ornek icinde kullanilmasinin daha anlamli olacagini dusunuyorum. Iste HTML kodumuz asagidaki gibi olacaktir:
- <ol id="menu">
- <li><a href="#" title="Birinci Link icin buraya tikla " accesskey="1">Birinci Link</a></li>
- <li><a href="#" title="Ikinci Link icin buraya tikla" accesskey="2">Ikinci Link</a></li>
- <li><a href="#" title="Ucuncu Link icin buraya tikla" accesskey="3">Ucuncu Link</a></li>
- <li><a href="#" title="Dorduncu Link icin buraya tikla" accesskey="4">Dorduncu Link</a></li>
- <li><a href="#" title="Besinci Link icin buraya tikla" accesskey="5">Besinci Link</a></li>
- </ol>
Menu listemizi olusturmak icin <ol> liste elementini kullandik. Ayrica <ol> listemize, CSS icinde kullanacagimiz ve referanslarda bulunacagimiz bir id verdik. id="menu" CSS icinde, bu listenin nasil gorunmesi gerektigini belirlememize yarayacak. Ayrica linkler icinde hem title hem de accesskey elementlerini kullandik.
title ve accesskey, erişilebilirlik icin onemli HTML elementleridir. title ile bu linkler hakkinda engelli kullanicilara daha fazla bilgi verebiliriz ve accesskey ile de fare kullanamayan engelli ziyaretcilerimizin klavye yardimi ile site icinde hareket etmelerini saglayabiliriz. Ornegin ALT+3 klavye tuslari bizi "Ucuncu Link" elementine goturecektir.
Butun bu asamalardan sonra CSS’imizi yazabiliriz. CSS bolumunde size 3 degisik CSS yazarak, 3 degisik menu sonucu elde etmenize yardimci olacagim. Birinci CSS size grafiksel dikey bir menu verecek.
1. CSS – Grafiksel Dikey Menu
- #menu {margin: 0; padding: 0; font: bold 12px/24px Verdana, sans-serif;}
- #menu ol, #menu li {margin:0; padding: 0 0 5px 0; list-style: none;}
- #menu a:link, #menu a:visited {width:125px; height:26px; background: url(grafik.gif) no-repeat; color: #999; display: block; text-decoration: none; text-indent: 14px;}
- #menu a:hover {background-position: 0 -26px; color: #900; text-decoration: none;}
Yukarida ki CSS’i incelerseniz goreceksiniz ki hazirladigimiz grafigi biz listedeki linkler icin arkaplan resmi olarak kullandik. Fakat yuksekligi 26 piksel vererek bu arkaplan resminin yanlizca bir kismini gostererek, grafigin "off" olarak gorunmesini sagladik. a:hover yani fare linkin uzerine geldiginde ise arkaplanin poziyonunu degistirerek grafigin "on" olmasini sagladik. Sonucu burada gorebilirsiniz.
2. CSS – Grafiksel Yatay Menu
- #menu {margin: 0; padding: 0; font: bold 12px/24px Verdana, sans-serif;}
- #menu ol, #menu li {display: inline; list-style-type: none; }
- #menu a:link, #menu a:visited {width:125px; height:26px; background: url(grafik.gif) no-repeat; color: #999; float:left; margin: 0; text-decoration: none; text-align:center;}
- #menu a:hover {background-position: 0 -26px; color: #900; text-decoration: none;}
Yukaridaki CSS, dikey menu CSS’ine cok benzemesine ragmen, sonuc bize yatay menu vermekte. Bunu saglayan ise display:inline; elementi ve float:left elementidir. Yatay menu CSS sonucunu burada inceleyebilirsiniz.
3. CSS – Grafiksiz Yatay Menu
- #menu {margin: 0; padding: 0 0 20px 10px; font: bold 12px/14px Verdana, sans-serif; border-bottom: 1px solid #A7A7A7;}
- #menu ol, #menu li {display: inline; list-style-type: none;}
- #menu a:link, #menu a:visited {float: left; margin: 0 10px 4px 10px; text-decoration: none; color:#999; }
- #menu a:hover {border-bottom:4px solid #A7A7A7; padding-bottom:2px; background:transparent; color:#900; }
Yukaridaki CSS’de de gordugunuz gibi, grafiksiz olarakda, basit ama roll-over efektli menuler olusturabiliriz. Burada tum yaptigimiz, grafigi devreden cikarip, onun yerine border yani kenar cizgileri ile oynama yapmak. Bu CSS bize surada gordugunuz gibi sonuclar verecektir.
Sorular?
Yukaridaki orneklerde gordugunuz gibi, HTML elementine hic dokunmadan, CSS ile uc degisik menu olusturduk. Ayrica bu menuler, JavaScript ile olusturulan menulere gore daha anlamli ve erişilebilir. Eger yukarida kullanilan CSS elementleri ile ilgili bir sorunuz olursa, asagidaki yorum kismini kullanabilirsiniz.
Beni twitter'de takip edebilirsiniz: @mehmet_dogan



Bu yazıya ait 16 yorum var.
Bu yazı yorumlara kapatılmıştır.Yahoo, superonline, mynet, siberalem, ekşi sözlük aklınıza gelebilecek bir sürü site css kullanıyor, css 3-5 yıldan beri var. Dreamweaver'in anca verebildiği özürlü css desteği sayesinde, menulerimi olmasa bile sayfamdaki tum fontlarımı, cogunlukla tablo veya sutunlara genel css etiketleri kullanarak yapiyorum.
Ben, kardesimin cok akillica bir css taktiğini paylaşmak istiyorum: (SafakCSS Yontemi)
--------------------------
Normalde dreamweaver ya da bir benzeriyle yaptiginiz bir css asagidaki gibi olur, icinde bir sürü sacma fazlalik etiketle, ornegimi ekşi sözlükteki css dosyasindan vereceğim, title diye bir şeyler var...
.title1 {
font: bold 12pt Verdana, sans-serif;
color: #000080;
}
simdi yukarıdaki title'la bir sey yazmak istersek soyle yapabiliriz, (span class=title1) Bunlar title1 seklindeler...(/span)
Bu tarzda eger font buyuklugunu 14 punto yapmak istersek yeni bir css daha yapmamiz gerekiyor, bu herkesin yaptigi bir hata:
.title2 {
font: bold 12pt Verdana, sans-serif;
color: #000080;
}
(span class=title2) Bunlar title2 seklindeler...(/span) İste simdi iki tane title'imiz ve iki kat fazladan kodumuz oldu....
/////////////////////////
Bizse soyle yapiyoruz...
.y30
{
font-size: 12px;
}
.y40
{
font-size: 14px;
}
.georgia
{
font-family:Georgia;
}
.verdana
{
font-family:Verdana;
}
.mavi
{
color: #0033FF
}
.kirmizi
{
color: #FF0000
}
////////////////
simdi diledigimiz kadar kombinasyon yaratabiliriz, mesela
(span class="mavi y30 verdana") Burasi mavi, 12 punto ve verdana oldu...(/span)
(span class="kirmizi y30 verdana") Burasi kirmizi, 12 punto ve verdana oldu...(/span)
(span class="kirmizi y40 georgia") Burasi kirmizi, 14 punto ve georgia oldu...(/span)
Yani birkac dogru duzgun css tanimlamasiyla, istediginiz kadar kombinasyon uretebiliyorsunuz, şafak (kardesim) bana ilk anlattiginda biraz itiraz ettim, eski tarz her css icinde font, renk belirlemeye alismistim, embesil dreamveaver sagolsun, fakat kabul edip kullanmaya baslayinca cok esnek ve harika bir yontem oldugunu fark ettim..
Belki buradaki yontemi ayri bir yazi konusu olarak dusunebilirsiniz.
Okdugunuz için tesekkurler..
Umut,
soyledigin yontem benimde cok kullandigim bir yontem. Yani CSS icinde birkac class tarif edip, bu classlarin birkacini ayni anda kullanilabilmesi.
Fakat CSS icinde dikkat etmemiz gereken bir kisim ise CSS'i neden kullandigimiz. CSS'i kullanmamizin bir nedeni, ileride site uzerinde bir degisiklik yapmamiz gerekirse, sitenin her sayfasi uzerinde degil yanlizca CSS icinde yapacagimiz bir degisiklikle tum sitenin bu degisikliklerden etkilenmesi. Bu nedenle, CSS icindeki class (ornegin .alt) ve id (ornegin #alt) isimleri verirken, anlamli ve gelecekte degismeyecek isimler vermeliyiz.
Ornegindeki
.kirmizi
{
color: #FF0000
}
classi bugun ki tasarimda bir kelimeyi kirmizi yapar. Fakat ileri bir tarifde, ayni kelimenin lacivert olmasini isteyen musteri nedeniyle CSS'imizi degistirmemiz gerekirse, site icinde kullandigimiz .kirmizi classi bir anlam ifade etmeyecegi gibi bizim aklimiza da karistiracaktir.
Katılıyorum, cok dogru, aslında ornegimin anlasilir olmasi icin isimleri oyle verdim, normalde renkler icin r10, r20, r30... font büyüklükleri icin y10, y20, y30.. gibi bir tanimlama daha mantikli... ama fontlar icin verdana, georgia, arial... olabilir.
Bu sekilde ileride yapacagimiz degisiklikler kafamızı karıştırmaz.
Hatta, bu yontemi benimseyen bir tasarimci, yaptigi her site icin iyi hazirlanmis tek bir css dosyasi kullanabilir, cunku webde kullanılabilecek yeni bir font ortaya cikmazsa, o ilk emektar css dosyaniz hala is gorecektir.
Bu yontem ozellike buyuk web tasarım sirketlerinin islerini hizlandirabilir, maliyetlerini dusurebilir.
Ertan Bey bana bir email gonderdi ve bir tavsiyede bulundu. Tavsiyesi "aktif menu" elementleri hakkinda idi.
Bircok kisi websitesinde belirli bir bolum ile ilgili menu elementini aktif hale getirerek, ziyaretcilere hangi bolum icinde olduklarini belirtir. Bunu yukarida ki menu ornegi icinde de uygulamak kolay.
Diyelim ki yukarida ki ornek icinde, ziyaretciniz, "ucuncu link" sayfasi icinde ve siz bu menu elementini aktif hale getirmek istiyorsunuz. Bunun icin yapmaniz gereken CSS'e ve HTML'e yeni bir class eklemek.
Bununla ilgili ornek sayfayi surada hazirladim. Kod icine bakarak yeni CSS'i ve HTML'i inceleyebilirsiniz. Eger bir sorunuz olursa, buraya yazarsaniz, elimden geldigince cevaplamaya calisacagim.
Slmlar..
bende http://www.turkmizah.net/forums.html için dinamik menü yapmayı düşünüyorum.. menünün arka planına türk bayrağı yerleştirmek istiyorum..
onunla uğrascam yaparsam haber veririm..
saygılar..
Ornekte text in buyuklugu 12px/24px olarak verilmis bunun anlami nedir. Ben genelde 9pt; 10pt; olarak kullaniyorum. Dogrusu nedir veya ne sekilde kullanmaliyiz ?
Benim merak ettiğim listeleri yatay hale getirirken kullandığınız #menu ol, #menu li nin tamamı ile sadece #menu li aynı şeyi temsil etmiyor mu? Aynı şey değilse css den #menu ol kaldırdığım zaman sayfanın sunumunda neden herhangi bir değişikliğe sebeb olmuyor? Anladığım kadarıyla display: inline ile listelemenin dikey olma özelliğini ortadan kaldırıp bunu yatay sıralama haline getiriyorsak bunu sadece #menu li ile uygulamamız yeterli olmaz mı? Web tasarımına yeni başladım ukalalık yapmam istemem ama #menu ol bana orda fazla kullanılmış gibi geliyor eğer gelmiyorsa ne işe yaradığını açıklayabilirseniz sevinirim.
YENİ BLOG AÇTIM. YENİ BİR AKA PLAN HAZIRLAMAK İSTİYORUM. YARDIMCI OLURSANIZ SEVİNİRİM. HİÇ BİR BİLGİM YOK.
ben menuyu saga kaydiramiyorum ne yapsam menu hep solda duruyor ama ben hem sagda hemde solda menu olmasini istiyorum bana yardimci olursaniz sevinirim
tsk ederim
ben ''http://www.unbf.ca/altiustu/upload/menu/sademenu.html'' bu linkteki gibi bisey yaptim fakat, bunun yatay degilde dikey olanini yapmak istiyorum css'nin hangi kodlarini ne ile degistirmeliyim ki bu menu yatay olarak gozuksun.
ilginize tesekkurler.
yatay olaninida yapmayi basardim :) simdi sormak istedigim soru su; menunun sayfada gorunecegi bolgeyi nasil ayarlayacagim ben?
bu yukaridaki yere
gibi degerler ekledigimde menunun yeri degismiyor. bunu nasil yapabilirim.
tesekkurler.
1. #menu {margin: 0; padding: 0 0 20px 10px; font: bold 12px/14px Verdana, sans-serif; border-bottom: 1px solid #A7A7A7;}
2. #menu ol, #menu li {display: inline; list-style-type: none;}
3. #menu a:link, #menu a:visited {float: left; margin: 0 10px 4px 10px; text-decoration: none; color:#999; }
4. #menu a:hover {border-bottom:4px solid #A7A7A7; padding-bottom:2px; background:transparent; color:#900; }
bu kodu nasil bir sekilde yazarsam calisir
PHP ile çalışanlar için durum biraz daha karışık olabiliyor
---------------------------------------------------------------
header.php (üst)
body.php (orta)
foother.php (alt)
(isteğe göre)
tabiki ben genellikle türkçemizin suyumu çıktı diyerekten
ust.php
sayfa.php
alt.php olarak ayırıyorum aslında ingilizce yapmakta fayda var daha kolay ezberleniyor ve unutmayın developher iseniz bid türk iseniz gerçekten şanslısınız :)
lafı uzatmadan css deki mantığımız burdada geçiyor biz sayfaları ayırdık
menülerin olcağı kısmı mesela ust.php ye aldık include "ust.php"; bir değişiklik yapılacaksa tek bir yerden yapılıyor include edilen yer index.php olarak düşünelim header deki yani ust deki maksat de bildiğimiz yani baş kısım diye tanımlandırılan kısımdır.bu kısımda gibi sayfanın broser yüklemeden önceki sayfa ayar ve standartlarını belirleriz aynı şekilde ust.php dede sayfamızın ayar ve standartlarını belirliyeceğiz böylece köklü bir site alt yapısı ortaya çıkıyor gerçi bunu yapıpta türkçe imla kurallarına uymayan benim gibi vardır :))
mehmet abimiz kadar anlatamadık ama php ye yeni başlayan arkadaşlarımız için yararlı olacağını düşünüyorum.
valla cok saglam bir css yazisi, turk milleti eminim birbirinden cok sey ogreniyor bu sayede bilgi gercekten paylastikca cogaliyor, ben bunlar baska hic biryerden ogrenemezdim. saygilar
menu 'ye geçişlerde ses eklemek mümknmü? Flas da olduğu gibi. Eğer oluyosa yardımcı olurmusunuz. tşk.
menu 'ye geçişlerde ses eklemek mümknmü? Flas da olduğu gibi. Eğer oluyosa yardımcı olurmusunuz. tşk.
Bu yazı yorumlara kapatılmıştır.
Kitabımı satın almak ister misiniz?