CSS ile Web Sayfası Oluşturma III
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

İç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:

Likit içerikli üç kolonlu sayfalarda Aksak kolon sorununun çözümüne bakalım.
Bir örnek yapacak olursak;

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.
Örnek çalışma için tıklayınız.
Öncelikle böyle faydalı bir site hazırladığınız için sizi tüm içtenlikle kutluyorum.Türkçe kaynak bulmak gerçekten zor.Şimdi 3 tane kolon var diyelim ilk resimdekinin 3 lüsünü düşünün.Yanı son resimdeki gibi.Sol ve sağ menü olsun ve kısa olsun.Ortadaki yer de uzun bir yazı var.Şimdi menü varken yazı o genişlikte inecek.Fakat menüler bitince aynı yer aşağıya aynı genişlikte iniyor.Yanlar boş.Peki yan menüler bitince ortadaki alanı genişletebilir miyiz.Ya da bir menünün yeri hep boş kalacak.Diğer menü bitince yazı oraya açılacak.Umarım anlatabilmişimdir.
soldan sağ dan ve üstten borderları zemin resmine ekleyip alttan border ı alt kısmın üst kenarlığı olarak vererek çözülür diye düşünüyorum.
Merhaba,
Siteni ilgi ile okuyorum, sayende tablosuz yapı hakkında birçok şeye hakim durumdayız.
Bu konu ile ilgili sormak istediğim konu şu: Aksak kolonları arkaplan resmi vererek çözebiliyoruz ancak diyelim ki bu kolonlara border uygulamak istiyoruz. Bu durumda sorun yeniden karşımıza çıkacak.
Bunu nasıl aşarız?
şimdi düzelmiş linkte. teşekkürler tekrardan
ben tıklıyorum sayfa açılıyor ilginç
neyse pdf linkini aşağıya ekliyorum. Sorun için kusura bakmayın.
http://www.fatihhayrioglu.com/pdf/CSS_ile_Web_Sayfasi_OlusturmaII.PDF
Daha önce likit bir sayfanın nasıl yapılacağını bahsetmiştik. İsterseniz yine de bir göz atın
diyor;
http://www.fatihhayrioglu.com/?p=179
a link veriyor. ordada;
Üzgünüm, sizin kriterlerinize uygun yazı yok.
diyor :)
cevap için teşekkürler.
link çalışıyor. bazen bana da oluyor linkler de kopma oluyor, ama şu an çalışıyor.
İkinci sporuna evet diyorum. :D
hocam selam,
öncelikle yukarıda yazıda geçen likit sayfa linki ölmüş.
ikinci olarak farklı çözünürlüklerde sayfanın aynı görüntüyü vermesini nasıl sağlayacağız. bunun için araştırmamız gerekn konu nedir? likit sayfa kavramımıdır?
bi aydınlatırsan sevinirim fatih (:
Aksak kolon olarak adlandırdığım sorun genelde iki veya üç kolondan meydana gelen sitelerde her iki kolonunda zemininde bir renk veya resim varsa ve bunların aynı yerde bitmesini istiyorsak görsel güzellik açısından bu yöntemi kullanırız.
Bu yöntemle kolonların içerikleri uzunluğundan kaynaklanan yükseklik farkları giderilmiş oluyor. Görüntü bozukluğu gideriliyor.
Hocam çok teşekkür ederim öncelikle.
css ile yeni ilgileniyorum ve bu “aksak kolon” sorununun çözümünü anlayamadım. Sorun tabi ki benim acemiliğimden kaynaklı. Sizden ricam daha açık anlatmanız eğer mümkünse çok teşekkür ederim.