CSS ile Web Sayfası Oluşturma

CSS’in en büyük avantajlarından biri ve en önemlisi başka bir koda(XHTML hariç) ihtiyaç duymaksızın sayfa iskeleti ve stilini oluştumamıza olanak sağlamasıdır.CSS 1996′dan beri kullanıla gelen bir standart olsa da popülaretesini Zen Garden’ın sayfa planlaması için kullanmaya başlamasından sonra arttırmıştır.Eskiden sayfayapısını tablolarla oluştururduk.Bu kullanımın bir çok sorunları vardı.Bunları aşmak için CSS ile sayfa planlama metodları kullanılmaya başlanmıştır.Biz burada bu konudan bahsedeceğiz.
CSS ile sayfa planlaması yaparken bazı problemlerle karşılaşacağız, ancak buradan şu anlaşılmamalı CSS’de sorun var. Aksine sorun CSS’den değilde standartları kendine göre yorumlayan web tarayıcılarından kaynaklanmaktadır. Zamanla bu web tarayıcıları kendine çeki düzen vermeye başladı(Örn: İE7 de CSS sorunlarının bir çoğunu halletti) Amaç körü körüne tablosuz web sayfası tasarlamak değil, sayfalarımızı standartlara ve web tarayıcılarına en uygun şekilde kodlamaktır. Hiç tablo kullanmayayım diye tablo kullanılması gerek yerlerde de tablo kullanmamak abesle iştigaldir.
Aslında şimdiye kadar ki makaleler de bu konunun temellerini attık. CSS ile konumlandırma(positioning) , Float ve Clear özellikler ile konumlandırma vd. makaleler bu işin temellerine değindik. Burada daha elle tutulur örneklerle bu metodu anlatmaya çalışacağız.
CSS sayfa planlama metodları üç temel konu üzerine inşa edilmiştir. Konumlandırma, floating ve margin farklılıkları. Bu üç temel konu anlaşıldıktan sonra CSS ile sayfa planlamayı anlamamız çok kolaydır. Biz burada floating metodu ile sayfa oluşturmayı göreceğiz. Bunun dışında konumlandırma öğeleleri kullanarak sayfa oluşturma ve eksi margin değeri ile sayfa oluşturma metodlarıda vardır. Ancak biz burada bunlara değinmeyeceğiz.
Sabit Genişlikteki Sayfalarda İki Kolonlu Yapı
Örnek1:
CSS ile Web Sayfası Oluşturma
HTML Kodları (HTML4 İçin):
<body>
<div class=”container”>
<div class=”banner”></div>
<div>
<div class=”sol_menu”></div>
<div class=”sag_icerik”></div>
</div>
<div class=”footer”></div>
</div>
</body>
Css Kodları:
.container {
width: 760px;
margin: 0 auto;
border: 1px solid #0F0;
}
.banner {
width: 760px;
height: 120px;
background-color: #CC0;
}
.sol_menu {
width: 200px;
height: 300px;
background-color:#0C9;
float:left;
}
.sag_icerik {
width: 560px;
height: 300px;
background-color:#F90;
float:left;
}
.footer {
clear:both;
width: 760px;
height: 80px;
background-color: #F06;
}
Örnek 2:
CSS ile Web Sayfası Oluşturma
İlk olarak HTML kodlarını yazalım. (HTML4 İçin)
<body>
<div id=”sayfa”>
<div id=”ustAlan”> … </div>
<div id=”icerik”> … </div>
<div id=”anaMenu”> … </div>
<div id=”altAlan”> … </div>
</div>
</body>
Önemli bir nokta varki oda icerik alanının anaMenu‘den önce gelmesi gerekmektedir. Erişebilirlilik(yani tüm araçlarda sayfamızın en iyi şekilde görünmesi) için icerik alanının anaMenu‘den önce gelmesi gerekir. Çünkü pda ve cep telefonu gibi araçlarda katmanların sıralamasına göre ekranda görüneceğinden, ilk olarak içerik alanının görünmesi tercih sebebidir. şžimdi css kodumuzu yazarsak:
#sayfa {
width: 768px;
}
#ustAlan {
background-color:#CC0;
width: 768px;
height: 150px;
}
#icerik {
float: right;
width: 568px;
height: 250px;
background-color:#39F;
}
#anaMenu {
float: left;
width: 200px;
height: 250px;
background-color:#FC0;
}
#altAlan {
width: 768px;
clear: both;
height: 120px;
background-color:#C30;
}
Bu kodu yazdıktan sonra sayfamız başta gördüğümüz şekildeki duruma gelmiş bulunmaktadır. Burada yazdığımız kodda “icerik” alanının sağa, “anaMenu” alanının sola yerleşmesi için genişlik değeri ve float değerleri tanınmlanmıştır. Ayrıca altAlan‘ın bu iki bölümün altında kalması için clear:both tanımlaması yapılmıştır.
CSS ile sayfalarımızı ve elementlerimizi ortalamak bölümündeki metodu uygulayarak sayfamızı ortalayabilriz.
body{
text-align:center;
}
#sayfa{
width: 768px;
margin:0 auto;
text-align:left;
}
Örnek 3:
CSS ile Web Sayfası Oluşturma
HTML4’e Göre Kodlar
<body>
<div class=”Cevreleyici”>
<div class=”Siteustu”></div>
<div>
<div class=”Sitesagi”></div>
<div class=”Sitesolu”></div>
</div>
<div class=”Sitealti”></div>
</div>
</body>
Css Tanımı
.Cevreleyici {
background:#FFF;
width: 800px;
border:1px solid #F03;
margin:0;
}
.Siteustu {
background-color:#CFC;
width:800px;
min-height:75px;
}
.Sitesagi {
background-color:#0CF;
width:300px;
min-height:400px;
float:left
}
.Sitesolu {
background-color:#66F;
width:500px;
min-height:400px;
float:left
}
.Sitealti {
background-color:#CFC;
width:800px;
min-height:500px;
}
CSS ile Web Sayfası Oluşturma
Yukardaki gibi sitenin ana gövdesinin ortalanması için CSS üzerinde yapılması gereken düzeltme şu şekildedir:
.Cevreleyici {
background:#FFF;
width: 800px;
border:1px solid #F03;
margin:0 auto;
}
Sabit Genişlikteki Sayfalarda en çok rastlanan problemler sabit genişlik uygulanan katmanlara pading, margin ve border değeri atandığında IE5 de sorunlu görünmesidir bu problemi aşmak için iki yöntem vardır. Birinci yöntem CSS ile Kutu modeli, sorunları ve çözümleri bölümünde anlatılmıştır. ikinci yöntem ise kapsayıcı katmanlara(icerik, anaMenu vb.) padding ve margin vermek yerine kapsayıcı katman içindeki elementlere bu atamaları yapmaktır.
Basit yapılı sayfalarda ikinci yöntemi, karmaşık yapılı sayfalarda ise birinci yöntemi denemenizi öneririm.
Elastik Web Sayfaları Oluşturma
Likid Sayfalar yüksek çözünürlüğe sahip geniş ekranlarda satır yüksekliklerinden dolayı pek hoş görünmeyebilir. Bunun aksine, daraltılmış pencerelerde çok kısa ve parçalanmış görüneceklerdir ve metin boyutu arttırıldığında üst üste binmiş satırlarda görüneceklerdir. Bununla ilgili olarak elastik sayfa oluşturma metodu bize yardım edecektir.
Elastik Sayfalar web tarayıcılarına göre font boyutunun ve elementlerin genişliğinin göreceli olarak ayarlandığı sayfalardır. Genişlikleri em, yüzde(%) ve ex gibi göreceli birimler kullanarak tanımladığımızda font boyutu sayfa genişliğine göre değişecektir. Aynı şekilde satır yüksekliği(line-height) değerinde de göreceli birimler kullanarak daha okunaklı sayfalar elde edebilriz.
Elastik sayfa planlama metodununda bazı problemleri vardır, örneğin sabit genişlikteki sayflardaki gibi elastik metodda da boş alanlar yeterince kullanılamaz. Çünkü font boyutu arttırılırsa sayfa genişliği tarayıcının genişliğini geçecektir ve yatay kaydırma çubuğu çıkacaktır. Bu durumdan kurtulmak için body elementine max-width 100% ataması yapabilriz. Ancak bu özelliği IE6 desteklememektedir.
Elastik web sayfası tasarlamak çok kolaydır. Sabit Genişlikte sayfa tasarımı yapılan bir sayfanın birimleri piksel yerine em olarak değiştirilirse sayfa elastik yapıya kavuşacaktır. 1em yaklaşık olarak 10piksele denk gelir.
em’in asıl tanımı küçük “m” harfi genişliğidir. Normalde em font boyutu birimi olarak kullanılır ancak CSS’de width, line-height vd. özelliklerin birimi olarak da kullanılabilir. Em üst elemente veya diğer elementleri baz alarak göreceli bir değer alır. Bu özellik bize elastik web sayfası hazırlama imkanı verir.
Çoğu web tarayıcısınnda normal font boyutu 16px’dir. 10 pikselin yüzdesel değeri yaklaşık olarak 62.5% civarındadır. Bu belirtilen değerlere göre kodumuzu yazarsak
Örnek 1 :
CSS ile Web Sayfası Oluşturma
(HTML4 İçin)
<div id=”sayfa”>
<div id=”ustAlan”> … </div>
<div id=”KapsayiciAlan”>
<div id=”icerik”> … </div>
<div id=”BannerAlani”> </div>
</div>
<div id=”anaMenu”> … </div>
<div id=”altAlan”> … </div>
</div>
body {
text-align: center;
font-size: 62.5%;
font-family: Arial, Helvetica, sans-serif;
}
#sayfa {
width: 72em;
margin: 0 auto;
text-align: left;
}
#ustAlan {
width: 72em;
height: 100px;
background-color:#0C9;
}
#anaMenu {
float: left;
width: 20em;
height: 250px;
background-color:#399;
}
#KapsayiciAlan {
float: right;
width: 52em;
height: 250px;
background-color:#F69;
}
#icerik {
float: left;
width: 32em;
height: 250px;
background-color:#CC0;
}
#BannerAlani {
float: right;
width: 20em;
height: 250px;
background-color:#F90;
}
#altAlan {
width: 72em;
clear: both;
height: 80px;
background-color:#0CF;
}
Burada body elementi font boyutunu 1em eşit olan font-size:62.5%; atamasını yaptık. Daha sonra sayfadaki birimleri bu değeri baz alarak hesapladık ve em birimi vererek sayfamızı elastik bir hala getirdik.
Sayfamızın Sabit Genişlikteki sayfalardan farkını anlamak için web tarayıcısının font boyutu değerlerini veya yakınlaştırma(zoom) aracını (Opera, FF-eklentisi var ve IE 7 de var)kullanarak görebilriz. IE ve FF için Görünüm(View) – Metin Boyutu(Text Size) Opera için View – Zoom seçeneklerini kullanarak farkı görebilriz.
CSS ile Web Sayfası Oluşturma
Likit Sayfalarda İki Kolonlu Yapı
Likit Sayfalarda Sabit Genişlikteki Sayfalar’dan farklı olarak genişlik değerleri piksel(px) olarak değil yüzde(%) olarak verilmesidir. Bu tür sayfalarda sayfa genişliği web tarayıcısının boyutu ile bağlantılıdır. Web tarayıcısının genişliği arttırıldığında sayfa genişliği artacak, web tarayıcısının genişliği azaltıldığında sayfa genişli azalacaktır.
CSS ile Web Sayfası Oluşturma
Kodu yazarsak (HTML4 İçin):
body {
text-align: center;
}
#sayfa {
width: 83%;
margin: 0 auto;
text-align: left;
}
#ustAlan {
background-color: #CC0;
width: 100%;
height: 150px;
}
#icerik {
float: right;
width: 70%;
height: 250px;
background-color: #39F;
}
#anaMenu {
float: left;
width: 30%;
height: 250px;
background-color: #FC0;
}
#altAlan {
width: 100%;
clear: both;
height: 120px;
background-color: #C30;
}
Örnek 2
CSS ile Web Sayfası Oluşturma
Bir çok sitede üç kolonlu yapı kullanılmaktadır. Kolonlu yapı ile iki kolonlu yapının kodlamasında fazla bir fark yoktur. Tek yapamız gereken yapıyı iki kolonlu bölümlere ayırmaktır, bunun için sağdaki iki kolonu bir kapsayıcı katman(KapsayiciAlan) içine alarak yapıyı iki kolonlu hale getirdik(anaMenu ve KapsayiciAlan)
body {
text-align: center;
}
#sayfa {
width: 768px;
margin: 0 auto;
text-align: left;
}
#ustAlan {
width: 768px;
height: 120px;
background-color:#F63;
}
#anaMenu {
float: left;
width: 200px;
height: 250px;
background-color:#6C3;
}
#KapsayiciAlan {
float: right;
width: 568px;
}
#icerik {
float: left;
width: 368px;
height: 250px;
background-color:#CF0;
}
#BannerAlani {
float: right;
width: 200px;
height: 250px;
background-color:#F96;
}
#altAlan {
width: 768px;
clear: both;
height: 130px;
background-color:#F60;
}
Ve ayrıca html koda da aşağıdaki değişiklikleri yaptığımızda üç kolonlu yapıyı elde ederiz (HTML4 İçin).
<div id=”sayfa”>
<div id=”ustAlan”> … </div>
<div id=”KapsayiciAlan”>
<div id=”icerik”> … </div>
<div id=”BannerAlani”> </div>
</div>
<div id=”anaMenu”> … </div>
<div id=”altAlan”> … </div>
</div>
Örnek 3 :
CSS ile Web Sayfası Oluşturma
(HTML4 İçin)
<body>
<div class=”site_siniri”>
<div class=”turuncu_banner”></div>
<div class=”parlak_yesil_icerikler”>
<div class=”mavi_sol_menu”></div>
<div class=”mor_sag_icerik”>
<div class=”acik_mavi_icerik_ust”></div>
<div class=”acik_mor_icerik_alt”></div>
</div>
</div>
<div style=”clear: both”></div>
<div class=”sari_en_alt”></div>
</div>
</body>
CSS kodları:
.site_siniri { width: 960px; margin:0 auto; }
.turuncu_banner { width: 960px; height: 120px; background-color: orange; }
.parlak_yesil_icerikler { width: 960px; height: 350px; background-color: greenyellow; }
.sari_en_alt { width: 960px; height: 80px; background-color: yellow; }
.mavi_sol_menu { float:left; width: 260px; height: 350px; background-color: cornflowerblue; }
.mor_sag_icerik { float:left; width:700px; height: 350px; background-color: blueviolet; }
.acik_mavi_icerik_ust { height: 200px; background-color: deepskyblue; }
.acik_mor_icerik_alt { height: 150px; background-color: deeppink; }
Aynı şekilde Likit sayfalarda üç kolonlu yapı oluşturabiliriz. Yapmamız gerek tek şey değerleri (%) olarak vermektir.
4,5 vd. kolonlu yapıyı da aynı şekilde yapabiliriz. Bence 3 kolonlu yapıdan sonraki kadamelerde(4,5 vd.) tüm katmanlara float:left verilerek oluşturmak daha mantıklı ve kolay olur.
Örnek 4 :
CSS ile Web Sayfası Oluşturma
HTML4’e Göre Kodlar
<body>
<div class=”Cevreleyici”>
<div class=”Siteustu”></div>
<div>
<div class=”Sitesagi”></div>
<div class=”Sitesolu”></div>
</div>
<div class=”Sitealti”></div>
</div>
</body>
Css Tanımı
.Cevreleyici {
background:#FFF;
width: 100%;
border:1px solid #F03;
margin:0;
}
.Siteustu {
background-color:#CFC;
width:100%;
min-height:75px;
}
.Sitesagi {
background-color:#0CF;
width:40%;
min-height:400px;
float:left
}
.Sitesolu {
background-color:#66F;
width:60%;
min-height:400px;
float:left
}
.Sitealti {
background-color:#CFC;
width:100%;
min-height:500px;
}
HTML5 Sayfa Yapısı:
CSS ile Web Sayfası Oluşturma
Aksak Kolonlar (Faux Column)
CSS ile sayfa kodlaması yaparken karşımıza çıkan sorunlardan biridir Aksak Kolonlar(faux column). Genelde isimlendirme olarak Faux Kolon diye geçsede ben burada Aksak kolon olarak kullanacağım. Basit bir örnek verecek olursak; içerik ve sağ kolon diye iki kolondan oluşan bir yapımız olsun. Bu kolonların zemin renklerinin farklı olduğunu düşünelim. Aşağıdaki şekildeki gibi
CSS ile Web Sayfası Oluşturma
İçerik ile sağ kolonun farklı yükseklite olması bir sorundur ve sorunu çözmek için bir kaç yöntem mevcuttur. Biz burada en kolayı ve en kullanışlı olanı anlatmaya çalışacağız.
Bu metodda yapılan iki kolon bir kapsayıcı katman içine alınarak iki kolonun zemin resmi bu kapsayıcı katmana tanımlanmaktır.
#kapsayiciKolon {
background: #fff url(zemin_ard.gif) repeat-y left top;
}
Aynı şekilde üç kolonlu yapılar içinde çözüm üretilebilir. Sabit genişlikte sayfalarda Aksak Kolonları düzeltmek bu kadar kolaydır. Esnek yapılı sayfalarda Aksak Kolonları düzeltmek biraz daha zordur. Web tarayıcısının boyutları değiştiğinde kolon şekli ve kolon boyutu değişecektir. Likit tasarıma sahip bir sayfada Aksak Kolon sorunun çözümü zemin resmi konumlandırma değerlerini yüzde olarak vermektir.
Eğer zemin pozisyonunu belirlemek için piksel değeri kullanıyorsanız, elementin sol üst köşesine göre zemin resminizi piksel değeri vererek konumlandırırsınız. Yüzdesel konumlandırma ile zemin resmi konulandırıldığında, atanan değerler hem üst elemente göre, hem de elementin kendine göre konumunu belirler. Örneğin:
background: #fff url(resim.gif) no-repeat 25% 10%;
Yukarıdaki tanımlama sonucunda zemin resmi hem üst elementin %10 üst ve %25 solundan mesafe alacaktır, hemde kendi içinde %10 üst ve %25 soldan mesafe alacaktır. Aşağıdaki şekilde gösterilmiştir:
CSS ile Web Sayfası Oluşturma
Likit içerikli üç kolonlu sayfalarda Aksak kolon sorununun çözümüne bakalım.
Bir örnek yapacak olursak;
CSS ile Web Sayfası Oluşturma
Daha önce likit bir sayfanın nasıl yapılacağını bahsetmiştik. İsterseniz yine de bir göz atın Yukarıdaki ekranda da görüldüğü gibi orta kısıma birden fazla zemin rengi uygulamamız gerekiyor. Bunun için likit sayfa oluştururken yaptığımız Kapsayıcı katmana bir zemin resmi sağ taraftaki iki kolonumuzu kapsayana ikinci katmana da ikinci zemin resmimizi tanımlayarak güzel bir sayfa oluşturacağız.
2000 piksel genişliğinde ve 10 piksel yüksekliğinde bir zemin resmi hazırlayalım(Sol Alan Zemin resmi). Sonra 1.Aksak Kolonumuzu oluşturalım(#SolKolon) . Menü alanı bu kapsayıcı elementin 23% genişliğine sahip olacaktır. Ayrıca yine 23% genişliğe sahip bir alan daha oluşturmalıyız(Sağ İçerik Alanı). 2000px genişliğindeki zemin resmini kapsayan alandan Aksak Kolona atanan zemin renginin genişlik değeri 460 piksel olacaktır. Aksak alanın zemin renginin dışındaki alalanları(1540px) transparan yapmak için zemin resmimizi .gif formatında yapmalıyız.
#KapsayiciAlan {
width: 85%;
margin: 0 auto;
text-align: left;
background: #fff url(images/sol_zemin_resmi.gif) repeat-y 23% 0;
}
Benzer şekilde ikinci bir içerik oluşturarak sağda kalan iki kolona aynı metod uygulanabilir. Yine 2000 piksel genişliğinde 10 piksel yüksekliğinde bir zemin resmi hazırlayıp bu sefer resmin sağ tarafına sağ kolon zemin rengi doldurulur ve kalan bölge transparan olacak şekilde kaydedilir. ikinciAlan’ın KapsayiciAlan’a göre konumu karşılatırmak için Bu Aksak kolonun soldan mesafesi resmin soldan mesafesi %77(100-23)’den başlamalıdır. Çünkü KapsayiciAlan’ın zemin resmi zaten uygulanmıştır bu nedenle biz ilk Kapsayici alan içine bir tane daha ikinciKapsayiciAlan eklemeliyiz. Bu yeni ikinciKapsayiciAlan‘nınada zemin resmi atamalıyız.
#ikinciKapsayiciAlan {
background: url(images/sag_zemin_resmi.gif) repeat-y 77% 0;
}
Bu şekilde çok güzel bir 3 kolonlu likit bir sayfa elde ederiz.
Kaynak
•www.fatihhayrioglu.com
•http://www.yunusbassahan.com/blog/html5/html-5-1-sayfa-yapisi.html