Web Geliştirme Eğitimi Dersleri, 007

3 Ocak 2008, Perşembe

FLOATING

  1. /* DOUBLE-MARGIN BUG örnek ( Sadece IE6 ) */
  2. #box
  3. {
  4.  float: left;
  5.  margin-right: 10px; /* Çıktıda bu değer 20px olarak render edilir. */
  6. }
  1. /* DOUBLE-MARGIN BUG FIX ( Sadece IE6 ) */
  2. #box
  3. {
  4.  float: left;
  5.  margin-right: 10px;
  6.  display: inline; /* Fix için */
  7. }
  1. #middle_area
  2. {
  3.  overflow: hidden;
  4.  background-color: #ccc;
  5. }
  6. #left
  7. {
  8.  float: left;
  9.  background-color: #ff0;
  10. }
  11. HTML
  12. <div id="middle_area">
  13.  <div id="left">
  14.   <p>Bu Sol kutu!</p>
  15.  </div>
  16. </div>

Hatalı Overflow IE6

Hatalı Overflow IE6 - A

W3C Uyumlu Overflow

W3C Uyumlu Overflow - B

  • Resim A’ gri background görünmüyor!
  • Resim A’da #left , #middle_area’nın dışında gibi duruyor!

Ya #middle_area’dan sonra bir div daha olsaydı?

  1. #middle_area
  2. {
  3.  overflow: hidden;
  4.  background-color: #ccc;
  5. }
  6. #left
  7. {
  8.  float: left;
  9.  background-color: #ff0;
  10. }
  11. HTML
  12. <div id="middle_area">
  13.  <div id="left">
  14.   <p>Bu Sol kutu!</p>
  15.  </div>
  16. </div>
  17. <div>Bu div, teorik olarak <strong>clear: left</strong> yapmış gibidir!</div>

Hatalı Overflow IE6

Hatalı Overflow IE6 - A

W3C Uyumlu Overflow

W3C Uyumlu Overflow - B

IE7 de sorunsuz!

IE7’de sorunsuz!

Bazen bu durum canımızı çok sıkabilir. width: vermeden bazı şeyleri kolayca halletmek isterken, IE6 yüzünden, mecburen bu durumu çözmek için, dıştaki div’e ( bu örnekte #middle_area ) overflow: dışında ilave olarak width: de vermek durumunda kalırız.

  1. #middle_area
  2. {
  3.  overflow: hidden;
  4.  background-color: #ccc;
  5.  width: 100%;
  6. }
  7. #left
  8. {
  9.  float: left;
  10.  background-color: #ff0;
  11. }

IE6 fixlenmiş hali

IE6 fixlenmiş hali

clear: left | right | both

Floating’i bitirmek için kullanılır. both hem left hem de right floatları bitirir.

  1. #middle_area
  2. {
  3.  overflow: hidden;
  4.  width: 100%;
  5.  background-color: #ccc;
  6.  padding: 10px;
  7. }
  8. #left
  9. {
  10.  float: left;
  11.  background-color: #cc0;
  12.  margin-right: 20px;
  13. }
  14. #right
  15. {
  16.  background: #ff0;
  17. }
HTML
  1. <div id="middle_area">
  2.  <div id="left">
  3.   <p>Bu Sol kutu!</p>
  4.  </div>
  5.  <div id="right">
  6.   <p>Bu Sağ kutu!</p>
  7.  </div>
  8. </div>

Garip Floating!

Garip Floating!

Analiz

  • #left sola float ediyor.
  • #left sağında 20px marjin var.
  • Beklentimiz sağ’daki gibi
  • #right için herhangi bir float durumu verilmemiş!
  • #right için default durum sözkonusu
    yani : display: block;
  • IN-LINE’a dönen BLOCK-LEVEL ( #left )
    sağına marjin veremiyor.
    Browser aptallaşıyor!
  • Aslında #right, kendini 100% olarak
    #middle_area içine yerleştiriyor.
  • #left’de float etmeye çalışıyor kendini sola yerleştiriyor.
  • #left’de #right’da aynı katmanda kalıyorlar.
  • #left, #right’ı iterek kendini sola yapıştırıyor.
  • margin-right: 20px;’de saçma bir şekilde render ediliyor.

Hayal ettiğimiz görüntü

Hayal ettiğimiz görüntü

Çözüm :
  1. #middle_area
  2. {
  3.  overflow: hidden;
  4.  width: 100%;
  5.  background-color: #ccc;
  6.  padding: 10px;
  7. }
  8. #left
  9. {
  10.  float: left;
  11.  background-color: #cc0;
  12.  margin-right: 20px;
  13. }
  14. #right
  15. {
  16.  background: #ff0;
  17.  float: left; /* Fix */
  18. }

Olması Gereken Durum

Olması Gereken Durum

Konteyner içinde, floating var ise, peşi sıra gelicek elementlerde de ya floating: durumu olacak, yada floating kesilecek. ( clear: )
Eğer 15.satır yerine;
clear: left; yada clear: both; yazsaydık???

clear: left;

clear: left;

  • Floating bitecek
  • #right’ın pozisyonu default’a dönecek.
  • Öncesindeki html elementi ne ise ( <div id="left"> )
    onun altına kendini block yapacak.

clear: ile, öncesinde bulunan floating durumunu temizleriz!

display:

Bu komut ile BLOCK-LEVEL elementi IN-LINE haline getirebiliriz.

Elementleri show / hide ( göster / gizle ) yapabiliriz.

div’leri table gibi kullanabiliriz.

Herhangi bir elementi li ( list-item ) gibi kullanabiliriz.

Parametreleri

display: ve position: detayları bölüm 008’de...