CSS’i hepimiz seviyoruz, hatta bazılarımız hem birer CSS aşığı, hem de birer CSS profesyoneli olarak yazımızda misafir olarak yer ediniyorlar.
Evet, CSS’i hepimiz çok seviyoruz. Ama bazen kendimizi tutamayıp
öyle tasarımlar yapıyoruz ki, div yapısını inşaa etmeye başlamadan önce kahvemizi önümüze alıp derin bir nefes çekiyor, ve öylece başlıyoruz, zira yaptığımız tasarım misafir tasarımcılarımızı bile zorlayacak türden olabiliyor.
Doğru, CSS’i hepimiz çok seviyoruz. Ama yaptığımız tasarımın
zorluğundan dolayı, onu CSS’e dökerken bin dereden su getirebiliyoruz.
Açtığımız div’lerin, atadığımız margin ve padding’lerin sayısını
sayamaz hale geldiğimiz zaman farklı şeyler düşünme zamanımızın
geldiğini anlıyoruz.
Gelin bu yazıda, position:relative; ve position:absolute;
özelliklerini iç içe kullanarak nasıl kolay yoldan zor çözüme
gidebileceğimizi tartışalım.
Absolute ve Relative yardımıyla bir öğeyi pozisyonlama hakkında ön bilgi için bu bağlantıya göz atın.

Bu daracık sayfada çok karışık şeyleri anlatma şansım olmadığı için,
son adıma geldiğimizde böyle bir yorum kutusuna sahip olmak istiyoruz.
Yorum kutumuzu hazırlarken aşağıdaki adımları izleyeceğiz;
Aslında yapacağımız şey çok basit, ihtiyacımız olan üç adet div var.
Ama benim burada üzerinde durmak istediğim şey, daha çok
position:relative; ve position:absolute; özelliklerini alt alta
kullanarak, çözüme kolay yoldan ulaşmak.
Gördüğünüz gibi, yorum metninin bulunduğu ana div’imiz yorum yazarı ve tarihin bulunduğu divleri içeriyor.
HTML kodlarında da gördüğünüz gibi, tüm div’lerimize class değerini
veriyoruz, zira yorum kutuları birden fazla kez tekrarlanabiliyor.
Class ve ID arasındaki farkın ne olduğunu bilmiyorsanız, Cemshid‘in yazdığı güzel makaleye göz atın.
Ana div’imizi hazırlamadan önce genel görünüm ayarlarını
hazırlıyoruz. Sayfamızdaki metinlerin boyutları aksi belirtilmedikçe 12
pixel büyüklüğünde olacak. Tüm bu metinler için Lucida Grande yazı tipi
kullanılacak. Eğer Lucida Grande kullanıcının sisteminde kayıtlı
değilse alternatif olarak Lucida Sans Unicode, eğer bu da sistemde
bulunamazsa Arial yazı tipi kullanılacak;
İlk adımımızda 310×95 pixel büyüklüğündeki ana div’imizi oluşturup,
artalan arkaplanımızı bu divimize atıyoruz. Son olarak bu div’e #CCC
renginde 1 pixellik bir kenar ekliyoruz. Yazıların kenarlara olan
uzaklıklarını ‘padding’ özelliği ile atıyoruz; yazılar üst kenara 30
pixel, diğer kenarlara 10′ar pixel uzaklıkta olacaklar.
Ve en önemli adımlardan biri olan bu adımda, ana div’imize
position:relative; özelliğini atıyoruz. Bu özellik, daha sonra diğer
iki div’de de kullanacağımız olan position:absolute; özelliğine bağlı
olan ‘top’ ve ‘left’ (ayrıca ‘right’ ve ‘bottom’) değerlerini bu div’in
üzerinde uygulanmasını sağlayacak.
Ana div’imize (Bkz. Resim 1) ait olan stilin son hali şu şekilde görünüyor;
Ana div’imizi tamamladık bile. Şimdi, position:absolute; özelliğini kullanarak yerleştireceğimiz isim kutucuğumuza göz atıyoruz.
Resim 2‘de gördüğümüz gibi, kutumuzun kenar
kalınlığı 1 pixel, ve kenar rengi #ccc olacak. Ayrıca kutunun padding
değeri 5px olup, arkaplan rengi de #FFFFCA olacak.
Bu adımın son bölümünde isim kutucuğumuzu ait olduğu yere yerleştireceğiz.
Bildiğiniz gibi, position:absolute; değerini verdikten sonra top, right, bottom veya left değerlerinden ikisinin yardımıyla bir öğeyi istediğimiz yere yerleştirebiliyoruz. Ancak, bu kutucuğa sayfa kenarlarından işletilecek bir değer veremiyoruz, zira bu kutunun sayfa başının değil, sadece ana kutunun (main_container) 10 pixel yukarısına yerleşmesi gerekiyor. Bu nedenle ilk adımımızda ana div’imize position:relative; kodunu ekledik. HTML kodunda da görebileceğiniz üzere, ana div’in, yani main_container divinin içine eklediğimiz bu isim kutucuğuna (name) atayacağımız position:absolute; özelliğinden sonra, vereceğimiz herhangi bir top, left, right, left değeri bu kutu üzerinden işletilecektir.
Sonuç olarak; ‘name’ öğesine position:absolute; özelliğini atar, ve ardından top:10px; left:10px; değerlerini verirsek, bu div ana div‘in (main_container) içerisine yukarıdan ve soldan 10 pixellik boşlukla yerleşecektir.
Kutucuğumuzun ana div’in 10 pixel yukarısına ve 10 pixel soluna
yerleşmesi gerektiği için, vereceğimiz top ve left değerleri (-) olmak
zorundalar;
Bu düzenlemelerden sonra yorum kutumuz şu şekilde görünüyor;

Genel görünümü ortaya çıkmış olan kutumuzun artık sadece adres kutucuğunu yapmamız gerekiyor.
Son adıma ulaştık bile. Şimdi yapmamız gereken tek şey adres
kutucuğumuz. Bu kutu da isim kutumuzla aynı olmasına rağmen, kutunun
sola değil, sağa yerleşmesi gerekiyor. Bu nedenle isim kutuğumuz için
kullandığımız kodun aynısını kullanıyor, fakat left:-10px; değeri
yerine right:-10px; değeri veriyoruz.

Ve tüm bu işlemlerin ardından kutumuz son görünümüne kavuşuyor.
Bugünlük bu kadardı, umarım anlatmak istediğimi anlatabilmişimdir :)
Örnek dosyasına buradan göz atabilir, dosyayı bu bağlantı üzerinden indirebilirsiniz.
Yorumlar
8 kişi yazı hakkındaki fikrini belirtmiş.
Wordpress editörünün yarattığı hatalar nedeniyle yazıyı ancak 4 denemeden sonra yayına koyabildim, bu nedenle 4 kez ‘yeni yazı yazıldı’ maili alan okuyucularımdan özür dilerim.
Muhammet Sevim, 15.6.2006 tarihinde yazmış.
İki şeyi merak ediyordum ancak öğrenmek nasip olmamıştı.
1- Bu tarz üst üste katmanların nasıl yapıldığı
2- Bu position:absolute;‘ın ne işe yaradığı.
Artık biliyorum…
abdagli, 16.6.2006 tarihinde yazmış.
Yazılarını takip ediyorum. Gerçekten anlatımın çok iyi. Bu derside oldukça güzel ve anlaşılır anlatmışsın.
Teşekkürler…
Cüneyt FAİKOĞLU, 16.6.2006 tarihinde yazmış.
Muhammet o kadar Türkçe çalışıyorum zorla anlıyorum senin bu yazdığın yazıyı ilk okumada anladım ya:) keramet sendemi bendemi bilmiyorum.Eline sağlık.BiGtHaNx
salihdeveci, 17.6.2006 tarihinde yazmış.
Çok teşekkürler anlatımın için.
Süleyman Şentürk, 19.6.2006 tarihinde yazmış.
Gerçekten çoğu web makaleleri insanı sıkarken bu blogda olmuyor bu ;)
bedafocb, 28.6.2006 tarihinde yazmış.
[…] ‘Relative’ özelliğini atadığınız bir öğe, bulunduğu yerden itibaren kaydırılacaktır. Fakat bu değeri atadığınız bir öğe, aşağısındaki öğelere etki etmeyecektir. Yani örneğin yukarıdan 10px kaydırdığınız bir div aşağısında bulunan diğer bir div’i aşağıya kaydırmayacak, bilakis onun üzerine kayacaktır. Relative ile ilgili daha fazla bilgiye bu makaleden ulaşabilirsiniz. […]
Muhammet Sevim* Web tasarımı üzerine » CSS, pozisyonlama ve Z-index, 4.7.2006 tarihinde yazmış.
Çok güzel bi yazı, özellikle position:absolute öğrenmede çok işime yaradı…
enver, 27.8.2006 tarihinde yazmış.
E-posta adresiniz hiçbir zaman yayınlanmaz. Temel HTML metin şekillendirilmesi izinlidir.