2010-11-12 17 views
12

Herhangi biri, css soruları için stackoverflow'tan daha iyi bir yer önerebilirse lütfen bana bildirin.İç içe kayan div'ler, dış divın büyümemesine neden olur

Arka plan ve kenarlıklı bir dış div var ve ardından renkli kutu içinde iki sütuna ihtiyacım var. Yüzen divları dış divın içine yerleştirdiğim için bazı sebeplerden dolayı, dış div büyür. İşte

<div class="tip_box"> 
    <h3>Send</h3> 
    <hr /> 
    <form id="email_form"> 

     <div class="three-columns"> 
      <div class="contact_form_input"> 
       <h6>Your Name</h6> 
       <input type="text" name="name_text_box" class="form_input" id="name_text_box" /> 
      </div> 
      <div class="contact_form_input"> 
       <h6>Your Email</h6> 
       <input type="text" name="email_text_box" class="form_input" id="email_text_box" /> 
      </div> 
     </div> 
     <div class="three-columns"> 
      <div class="contact_form_input"> 
       <h6>Recipient Name</h6> 
       <input type="text" name="name_text_box" class="form_input" id="Text1" /> 
      </div> 
      <div class="contact_form_input"> 
       <h6>Recipient Email</h6> 
       <input type="text" name="email_text_box" class="form_input" id="Text2" /> 
      </div> 
     </div> 

    </form> 
</div> 

<p>This is where your message will go. Anything you want, as long as you want. Make it personal; make the recipient know you care.</p> 

Benim CSS: Burada

benim HTML

.three-columns { 
    width: 290px; 
    float: left; 
    margin-right: 45px; 
} 
.tip_box { 
    padding: 20px; 
    margin: 20px 0px; 
    -moz-border-radius: 7px; 
    -webkit-border-radius: 7px; 
    -khtml-border-radius: 10px; 
    border-radius: 7px; 
    padding-left: 55px; 
    background: #eee; 
    font-style:italic; 
    background: #eff7d9 url(../images/icons/tip.png) no-repeat scroll 10px 15px; 
    border: 1px solid #b7db58; 
    color: #5d791b; 
} 

Ekran Görüntüsü:

http://dl.dropbox.com/u/2127038/cssissue.png

+0

Gördüğünüz sorunu açıkça göstermek için nasıl görüntü eklediğinizi seviyorum. Gerçekten çözdüğünüz problemi çözmek için çabucak ve kolay bir şekilde çözdüm. +1 –

cevap

19

Şamandıralı blokları içeren şamandıralı bloklar otomatik olarak genişlemez, çünkü şamandıra blokları normal akışın dışına (veya en azından özel olarak akış dışında) alınır. Bunu düzeltmenin bir yolu, overflow özelliğini hidden veya auto olarak belirtmektir.

.tip-box { overflow: auto; } 

Daha fazla bilgi için bkz quirksmode.

+0

taşma otomatik, kaydırma çubuklarına neden olur. Gizli tercih edilir. –

+1

Kesinlikle her zaman değil, ama bahsetmek için iyi bir şey. Sadece kutunun kenarlarına karşı bir şeyle koşarsanız (ve bunun etrafında çalışabilirsiniz) gerçekleşir. Ayrıca, "taşma: gizli" ifadesinin, kutunun üzerinde taşan resimler gibi içeriği kırpma potansiyeline sahip olduğundan da bahsetmelisiniz. – theazureshadow

+1

(Tahmin edebileceğiniz gibi, ben hala "quirksmode" (http://www.quirksmode.org/css/clearing.html) 'e bakmalı olsa da, haslayout açıklaması için' auto'.;) – theazureshadow

0

Bu durumda ben div'ler sol yüzer olmaz Onları göstermek istiyorum: satır içi veya satır içi blok.

3 sütun, tarayıcı penceresi küçülürse 2 sütuna, ardından 1 sütuna dönüşecektir.

+2

-1 Poster açıkça blokların yan yana sıralanmasını istedi. Şamandıra bunu yapmak için kabul edilen yoldur.'inline-block' yararlı olurdu, ancak bu durumda tamamen gereksiz olan bazı acı döner kavşaklar yapmazsanız IE6 veya IE7 tarafından desteklenmez. Ve 'satır içi' amaçlanan gibi görünen her yerde bir etki yaratmayacaktı; hiç de kutsallara sahip olmayabilir. – theazureshadow

1

Genellikle bir clearfix olarak bilinen şeylere ihtiyacınız olacak. Ayrıca, form elemanları için etiketleri biçimlendirme yerine h6 arasında label unsurları kullanmak isteyebilirsiniz, bir kenara olarak http://www.jsfiddle.net/yijiang/zuNwH/2

.tip_box { 
    overflow: hidden; 
} 

ve bunun yerine bir listesini kullanın: - Bu durumda içeren elemana bir overflow: hidden yapacağım bkz Her label - input çiftini içermek için bireysel div s sayfalarına ve CSS dosyanız için daha karmaşık seçicilere dayanarak kullandığınız class özniteliğinin miktarını azaltın.

<li> 
    <label for="recipient_email">Recipient Email</label> 
    <input type="text" name="email_text_box" id="recipient_email" /> 
</li> 
2
.tip_box { overflow:hidden; zoom:1; } 

bu, ie7 + ve diğer tarayıcılarda yeni blok biçimlendirme bağlamı kurar

+0

+1 tercih ederim. tam bir açıklama için :) – theazureshadow

3

Ekleme aşağıdaki HTML <div class="tip_box"></div> sonra yüzen içerecek şekilde IE6 içinde haslayout tetikler: Burada

<div class="clear"></div> 

CSS :

.clear{ 
clear:both; 
} 

Kesinlikle işe yarayacak.