ALTI ÜSTÜ TASARIM – Mehmet Doğan

 
yazı arşivi|abonelik|site ve yazar hakkında|teknoloji kimin umurunda|tavsiye ettiklerim|iletişim
 

Kutucuk Modeli

24 Şubat 2005

Bu yaziyi, Zoque formunda karsilastigim bir konu basligindan sonra yazmaya karar verdim. Bu yazinin icerigi ic karartici nitelikte teknik olup, teknik konularla ilgilenmeyen okurlarin, daha fazla zaman harcamadan baska eglenceli yerlere gitmeleri onerilir.

CSS'li tasarimlarin vazgecilmeyen ogesi "kutucuk" lardir. Ornegin bu yazinin gorundugu kisim bir kutucuk, yukarida gordugunuz logonun bulundugu kisim ise baska bir kutucukdan olusmaktadir. Eskiden kullanilan bir metod olan tablolarin yerini, CSS'de kutucuklar almaktadir. Tabloda ki TD elementinin yerini, CSS'de DIV elementleri almaktadir.

CSS'de bir kutucuk yaratmak gayet basittir.

  1. #kutu {
  2. width: 400px;
  3. margin:0;
  4. padding:20px;
  5. border: 20px solid #000;
  6. }

Yukarida tanimlanan kutucuk icindeki elementlerin anlami su sekildedir:

width: yazinin bulunacagi alanin uzunlugu (tablodaki width'e esittir)
margin: bu kutucugun diger kutulardan uzakligi (tablodaki cellspacing ile ayni anlamda)
padding: yazi ile kutucugun basladigi yer arasindaki uzaklik (tablodaki cellpadding ile ayni anlamda). Yanlizca 20px degeri verildiginde bu tekste, kutucugun tum kenarlarindan 20 px tampon verir. Eger yanlizca kutucugun sol kenarindan tampon verilmek istenirse o zaman padding-left:20px yazilir.
border: kutunun etrafindaki kenar cizgisi (tablodaki border ile ayni anlamda). 20px kenar cizgisi kalinligini, solid cizginin sitilini ve #000 ise rengini belirlemektedir.

Iste bu CSS kodunu kullanarak, kutucugunuzu asagidaki gibi olusturabilirisiniz
<div id="kutu">Burada yazi var... Burada yazi var... </div>

Buraya kadar hersey guzel. Maalesef, bu basit CSS kurali, butun web standartlarini destekleyen browserlarda duzgun calisirken, IE'de farkli calismaktadir. Iste bu probleme "Kutucuk Problemi" adi verilir.

Bunu gorsel bir ornek ile size aciklamaya calisacagim. Yukarida gordugunuz kod, web standartlarini destekleyen browserlarda asagidaki gibi bir sonuc verecektir:

Kutucugun Firefox'da gorunumu

 

Goruldugu gibi width:400px dedigimiz alan yanlizca yazilarin bulundugu kismin genisligini gostermektedir. Kutucugun toplam alan genisligi ise 480px olacaktir.

Fakat ayni kod, IE'de su sekilde goruntulenmektedir:

Kutucugun IE'de gorunumu

 

IE, toplam alandan, border ve padding miktarlarini cikararak, 320px'lik bir yazi alani bize vermekle birlikte, kutucugun toplam alani, bizim verdigimiz width degerine yani 400px'e esit olmaktadir. Bu problem, bir tasarim asamasinda, bizim kafamizi duvarlardan duvarlara vurmaya neden olmaktadir :)

Milyonlarca kisi, IE 5.x browser kullandigindan bu soruna bir cozum bulmak gerekli idi ve bu cozum Tantek Celik'de geldi. Tantek'in teknigi, bir tane CSS DIV elementi ile, standart ve standart olmayan browserlara, yazi alan genisligini tanimlamamizi sagladi. Iste bu teknigin ismine "Kutucuk Problemi Cozumu" deniyor. Tantek'in cozumu ile ilgili ayrintili bilgiyi "Box Model Hack" yazisinda bulabilirsiniz. Ben onun yerine, daha kolay olan Andrew Clover'in metodunu size gosterecegim.

Gelin bu teknige bir goz atalim. Bizim amacimiz yazi alaninin tum browserlarda 400px olmasi. Firefox gibi modern browserlarda yazi alani zaten 400px gorunmekte. IE'de ise 320px olarak algilanmakta. IE'de bu alani 400px yapmanin tek yolu, istedigimiz toplam degere sag padding, sol padding, sag border ve sol border genislikliklerini eklemek olacaktir.

400px + 20px sol padding + 20px sag padding + 20px sol border + 20px sag border = 480px

Biz, 480px'lik bir width tanimlayip, sayfamiza IE ile baktigimizda, tekst alani 400px olacaktir.

Peki bunu Firefox gibi modern browserlari etkilemeden CSS'imiz icine nasil koyabiliriz? Iste Andrew'nun cozumu:

  1. #kutu {
  2. padding: 20px;
  3. border: 20px solid #000;
  4. width: 480px; /* Bu kisim IE icin */
  5. w\idth: 400px; /* gercek deger - modern browserlar icin */
  6. }

Iste bu hepsi bu kadar. w\idth teknigi ile kutucugumuzun yazi alani hem IE'de hem de Firefox gibi modern browserlarda 400px olacaktir.

Dipnot: Bu problem IE'nin tum versiyonlarinda gorulmektedir. Microsoft, IE 6 ile birlikte, IE'nin cok gizlenmis bir ozelligini browserina dahil etti. IE 6, DOCTYPE'i belirlenmemis bir websitesine "Garip Mod"da calismakta iken eger DOCTYPE sayfaya eklenirse "Standart Mod"da calisiyor ve boylece, yukarida gosterdigimiz teknige gerek kalmiyor. Eger sitenizi ziyaret edenlerin buyuk bir cogunlugu IE 6 kullaniyorsa ve siz yukarida kullanilan teknigi, IE 5.x ve asagisi "standart" browserlar olmadigi icin desteklemek istemiyorsaniz, butun yapmaniz gereken sitenize DOCTYPE eklemek. Sizin sitenize uyan DOCTYPE'i gormek ve "DOCTYPE Salteri" hakkinda daha fazla bilgi almak istiyorsaniz, Eric Meyer'in sitesini ziyaret edebilirsiniz.

   
 
Bu yazı Mehmet Doğan tarafından saat 6:18 civarı yazılıp CSS/XHTML, Web Standartları dosyası içine işlendi.

Bu konuyu/yazıyı tartışan diğer websiteler diğer bloglar
Bu yazıyı okuyup beğenenler şu yazıyı da okudular.
Bu yazıdaki anahtar kelimeleri diger bloglar icinde ara ve bul: | | | |
 

Bu yazıya ait 15 yorum var.

Bu yazı yorumlara kapatılmıştır.
1. | 24 Şubat 2005 15:13 tarihinde, junkie demiş ki:

css yi hiç bilmeyen adam (zamanında hiç bilmezdim şimdi biraz bilirim) için en iyi başlangıçlardan biri , bir sürü değer deneyip üzerinde oynamalar yaparak , css öğrenilebilir.

özellikle topstyle 3 öğrenmeyi kolaylaştıran programların başında gelir.

2. | 24 Şubat 2005 20:58 tarihinde, aboo demiş ki:

Daha bugün arkadaşla css ile web sitesi yapımını konuşuyorduk. Eve gel hergünki gibi altıüstünü aç bide görki süper bir yazı. İyi yazı lafının üzerine geldi... Teşekkürler

3. | 24 Şubat 2005 23:14 tarihinde, Ogo demiş ki:

Merhabalar !

Firefox kullanan arkadaslara Edit CSS extensionunu oneriyorum. Sayfalarin style bilgilerini gorebileceginiz gibi, degerlerlerle oynadiginiz vakit gercek zamanda etkilesimli olarak uzerinde calistiginiz/oynadiginiz sitedeki degisimleri gorebilirsiniz. Cok basit, çabuk ve islevsel bir araç.

Bu guzel makaleyi okuyanlar zaten web standardlari, css hakkinda temel bilgilere sahip olacaklar.(ya da zaten sahipler..) edit css islerini kolaylastirabilir.

Bu arada "birseyler tasarlamak" makalelerini de begeniyle okudum. Kullanici odakli tasarim cogu zaman bahsettigin engellerden oturu basarilamayan bir hedef olarak kaliyor. Kimi zaman fikir asamasinda, kimi zaman ise uygulama sirasinda çöken denemelerin basarili olmasi icin projenin amacina uygun bir içerik iskeletinin kurulmasi ve web standardlarinin verimli kullanilmasi cok onemli.

Blogun icin tebrikler ve gorunmez ucak satmaya devam..

Ogo

4. | 05 Haziran 2005 16:23 tarihinde, Musatafa demiş ki:

Tamda yabanci sitelerde bu konuyla ilgili makaleler ariyordumki, bu siteye rasgeldim..

Cok tesekkurler

Mustafa

5. | 27 Eylül 2005 0:04 tarihinde, Ahmet USTA demiş ki:

Gerçekten faydalı bir püf noktası.Teşekkürler

6. | 02 Ekim 2005 2:29 tarihinde, Metin demiş ki:

Mehmet abi;
İmdat ya, ben bu probelmden muzdarip durumdayım şimdi height olayınıda h/eight yapıcaz bu mudur .? ben yapıorum olmuyor.
Bunu dışında bu problem IE 6.0 da yaşanıyor Doctype da olmasına karşın yine de 2 browserda farklı görüntü elde ediyorum.

7. | 12 Ekim 2005 15:38 tarihinde, Kerem demiş ki:

Aynı problem bendede var.

Firefox da gayet güzel ve ortada görünen kutu ie de aynı yerde ve ölçüde olmuyor.
www.thenoodleincident.com/tutorials/box_lesson/boxes.html sitesindeki bilgileride denedim ama
olmuyor. Beceremiyorum.

8. | 05 Mayıs 2006 11:28 tarihinde, mehmet mutlu elmas demiş ki:

Aynı problemi bende yaşadım fakat bir ayrıntı daha var.

Firefox Windows ile Linux ortamında farklı çalışıyor. Bende bazı noktalarda takıldım. Yaptığım tablo windows'daki Firefox'ta farklı Linux'deki Firefox'ta farklı çalıştı. Bunun sebebini hala bulamadım. Ama biz tasarımcılar(amatör veya profesyonel) bu farklılıkları gözardı etmemeliyiz.

9. | 03 Ağustos 2006 19:32 tarihinde, deniz Erdal demiş ki:

Selamlar,

1. #kutu {
2. padding: 20px;
3. border: 20px solid #000;
4. width: 480px; /* Bu kisim IE icin */
5. w\idth: 400px; /* gercek deger - modern browserlar icin */
6. }

koduna ek olarak sunu denemenizi oneririm

1. #kutu {
2. padding: 20px;
3. border: 20px solid #000;
4. _width: 480px; /* Bu kisim IE icin */
5. width: 400px; /* gercek deger - modern browserlar icin */
6. }


_ (underscore) ekini takip eden satiri sadece ie gorucektir.

saygilar

10. | 06 Ağustos 2006 1:18 tarihinde, Webdesigner - Online Marketing demiş ki:

merhaba mehmet,

cascading style sheet yani css web layout codunu güzel anlatmissin ama bircak kücük noktaliri senin/sizin dikatine cekmek isterim.

padding:20px tabel -> tr -> td cellpadding yerini almis olan css -> padding codunda sadece passing:20px yazarsaniz olusmus olan kutun her yerinde ice dogru 20px olusturmus olursunuz. ama eyer sadece diyelimki sag tarafta 20 px olusturmak isterseniz bunun icin extra padding-right:20px; deyil padding:0 0 0 20px; yazarsaniz daha iyi olur. bu yöntemin bir iyi yanidi cok yazmadan kutularinizi istediyiniz sekilde ice ve disa (margin:) sekilletebilirsiniz. diyelim margin:20px 0 15px 0;

Birde senin yapdigin w\idht yada h\eight W3C Css valid yani kompatibel degil .

Hepinize selam

11. | 02 Aralık 2006 15:58 tarihinde, mehmet demiş ki:

merhaba bende internette web standartlarını anlatan bi sitenin haber kısmında gördüm hem hack diyor hemde türk diyince merak etim ve tıkladım direk yazınız cok güzel teşekürler bu yazıyı uye oldugum portalda lıntı olarak yayınlıyorum umarım kızmazsınız eyw

12. | 02 Ocak 2007 21:40 tarihinde, isimsiz demiş ki:

Merhabalar

Uyumsuzluk yüzünden şuanda çıldırmış durumdayım

daha önce bir kaç sitede görmüştüm ama unuttum

Şimdi 2 css çağırma olayı var site mesela ie gördüğünde ie css açıyor ff gördüğünde ff css açıyor bunun bir kodu vardı ama neydi bilen var mı?

13. | 30 Mart 2007 12:03 tarihinde, Kenan KALFA demiş ki:

çok güzel bir ip ucu bilgisi sunmuşsun , teşekkürler , google sağolsun seni bana getirdi :)

14. | 07 Mayıs 2007 0:44 tarihinde, adanakahini demiş ki:

Eğer sadece IE için bir css yüklemek istiyorsanız, önce normal css'inizi (firefox ve diğer modern browserlar için olanı) yükleyin (link tagı ile), sonra onun altına aşağıda açıklamaları olan ksımları girmeniz yeterli olacaktır. (kodlar head bölümüne girilecek, birden fazla yazabilirsiniz, sonuçta if deyimi şeklinde olduğu için kendine ait browserda doğru çalışacaktır.)

IE5 ve ilerisi için (en çok kullanılan bu):

sadece IE 5.0 için:

IE 5.5 ve ilerisi için:

IE 6 'dan gerisi için ( lt = little anlamında):

sadece IE 7.0 için:

15. | 23 Mayıs 2007 1:02 tarihinde, H@K@N demiş ki:

#kutu {
border: 20px solid #000;
width: 500px;
} /*buraya kadar ie */
html > body #kutu {width:500px;} /* burası da modern browserler icin*/
arkadaslar yorum yapmıyorum sadece deneyin ve sonucu gorun !...


Bu yazı yorumlara kapatılmıştır.

Kitabımı satın almak ister misiniz?

Teknoloji Kimin Umurunda adlı kitabımı satın almak ister misiniz?