Bir ebeveyni <div> 'u çocuklarının boyuna genişletmek


308

Buna benzer bir sayfa yapısı var:

<body>
  <div id="parent">
    <div id="childRightCol">
      /*Content*/
    </div>
    <div id="childLeftCol">
      /*Content*/
    </div>
  </div>
</body>

Ebeveyn için ben istiyorum divgenişletmek için heightiç zaman div's heightartar.

Düzenleme:
Sorunlardan biri width, alt içeriğin widthtarayıcı penceresinin dışına taşması durumunda , geçerli CSS'm üst öğeye yatay bir kaydırma çubuğu koyar div. Kaydırma çubuğunun sayfa düzeyinde olmasını istiyorum. Şu anda ana div öğemoverflow: auto;

Bunun için CSS konusunda bana yardımcı olabilir misiniz?


6
İç divleri yüzüyor musun? Mevcut CSS'yi gönderebilir misiniz?
Eric

2
@Eric - benim de sorunum oldu - benim çocuk div (lar) yüzer vardı: sol, ben kaldırdığımda 'ebeveyn' otomatik olarak tanındı ve tam yüksekliğe gergin!
Michael Goltsman

Yanıtlar:


539

Bunu ebeveyn için dene, benim için çalıştı.

overflow:auto; 

GÜNCELLEME:

Çalışan bir çözüm daha:

Ebeveyn :

display: table;

Çocuk :

display: table-row;

67
overflow:autotarayıcının hangi değerin uygulanacağına karar vermesi gerektiği anlamına gelir. Hüner gerçekten ne yaparoverflow: overlay .
Alba Mendez

14
@jmendeth "Yer paylaşımı" adı verilen bir taşma değeri mevcut değil. Çocuk divleri yüzerse ne işe yaradığını beyan ediyor overflow:hidden.
Christoph

16
Waaaait. Rahatlayın. overlayWebkit dışında desteklenmediğini iddia etmek bir şey . Tamamen farklı olan bir başka şey ise hiç var olmadığını söylemek. Lütfen önce RTFM . ;)
Alba Mendez

6
Sadece Webkit üzerinde ise sadece% 20 var: P Link için alkış, bu web sitesini daha önce hiç görmedim. Bakımlı ve güncellenmiş mi? Yemin ediyor musun?
pilau

20
Alternatif bir cevap stackoverflow.com/questions/450903/… ve ayarlamayı önermektedir display:inline-block. Bu benim için harika çalıştı.
Jens

26

ekleyin clear:both. sütunlarınızın yüzdüğünü varsayarsak. Boyunuzun ebeveyni nasıl belirlediğine bağlı olarak bir taşmaya ihtiyacınız olabilir: otomatik;

<body>
<div id="parent">
    <div id="childRightCol">
    <div>
    <div id="childLeftCol">
    <div>
    <div id="clear" style="clear:both;"></div>
</div>
</body>

Bunu yapmak, içerik tarayıcı penceresinden daha geniş olduğunda üst div üzerinde yatay bir kaydırma çubuğu verir. Yatay kaydırmanın tüm sayfada olmasını istiyorum.
Steve Horn

1
Neden taşmaya ihtiyacınız var: auto ;? Testimde net: ikisi de; yeterliydi.
Paolo Bergantino

3
Bu, üst öğenin belirtilen bir yüksekliğe sahip olmadığını varsayar.
bendewey

Bu yaklaşım Firefox'ta sorunsuz çalışır, ancak IE 6'da çalışmaz. Herhangi bir çözüm var mı?
Steve Horn



4

Bunu buradaki cevabın talimatlarında anlayamayanlar için :

Set deneyin dolgu değeri daha sonra 0 çocuk div'ler margin-top veya margin-bottom varsa dolgu ile değiştirebilirsiniz,

Örneğin,

#childRightCol
{
    margin-top: 30px;
}
#childLeftCol
{
    margin-bottom: 20px;
}

onunla değiştirmek daha iyi olacaktır:

#parent
{
    padding: 30px 0px 20px 0px;
}

4

Kendi kendine temizleme gibi bir şey kullanma divgibi bir durum için idealdir bu . Öyleyse sadece ebeveyn üzerinde bir sınıf kullanacaksınız ...

<div id="parent" class="clearfix">

3

Ekle

clear:both; 

Ana div öğesinin css'sine veya üst div öğesinin altına şunu temizleyen bir div ekleyin: her ikisi de;

Bu doğru cevap, çünkü taşma: otomatik; basit web düzenleri için çalışabilir, ancak negatif kenar boşluğu gibi şeyleri kullanmaya başlayan öğelerle uğraşacaktır.


2

Bu istediğini yapıyor mu?

.childRightCol, .childLeftCol
{
    display: inline-block;
    width: 50%;
    margin: 0;
    padding: 0;
    vertical-align: top;
}


1

Bir üst div öğesinin, alt div öğesinin mutlak gibi herhangi bir konumlandırma özniteliği olmayan tek bir sütun olarak göstererek alt div öğesinin içeriği etrafında genişlemesini sağladım.

Misal:

#wrap {width:400px;padding:10px 200px 10px 200px;position:relative;margin:0px auto;}
#maincolumn {width:400px;}

#Wrap div'in en derin alt divı olan maincolumn div'a dayanarak bu #wrap div'in derinliğini tanımlar ve her iki taraftaki 200px dolgu, istediğiniz gibi kesinlikle yerleştirilmiş divleri yerleştirmeniz için iki büyük boş sütun oluşturur. Üstbilgi div'lerini ve altbilgi div'lerini position: absolute kullanarak yerleştirmek için dolgu üst ve alt kısımlarını bile değiştirebilirsiniz.



0

#ChildRightCol ve #childRightCol içindeki içeriğiniz sola veya sağa taşınırsa, bunu css'e eklemeniz yeterlidir:

#childRightCol:before { display: table; content: " "; }
#childRightCol:after { display: table; content: " "; clear: both; }
#childLeftCol:before { display: table; content: " "; }
#childLeftCol:after { display: table; content: " "; clear: both; }

0

Bu, spesifikasyonda açıklandığı gibi çalışmaktadır - burada birkaç cevap geçerlidir ve aşağıdakilerle tutarlıdır:

Blok düzeyinde alt öğeleri varsa, yükseklik, en üst blok düzeyinde alt kutunun üst kenar kenarı ile üstünden kenarları daraltılmış olmayan ve en alttaki blok düzeyi alt kutusunun alt kenar kenarı arasındaki mesafedir. içinde kenar boşlukları çökmemiş. Ancak, öğede sıfır olmayan bir üst dolgu ve / veya üst kenarlık varsa veya kök öğeyse, içerik en üstteki çocuğun üst kenar boşluğunda başlar. (İlk durumda, öğenin üst ve alt kenar boşluklarının en üstteki ve en alttaki çocuklarınkiyle çökerken, ikinci durumda dolgu / kenarlığın varlığı üst kenar boşluklarının daralmasını önler.) Benzer şekilde, öğesi sıfır olmayan bir alt dolguya ve / veya alt kenarlığa sahiptir, daha sonra içerik en alttaki çocuğun alt kenar kenarında biter.

buradan: https://www.w3.org/TR/css3-box/#blockwidth


0

Aşağıdaki kod benim için çalıştı.

css

.parent{
    overflow: auto;
} 

html

<div class="parent">
    <div class="child1">
    </div>
    <div class="child2">
    </div>
    <div id="clear" style="clear:both;"></div>
</div>


0

Nereden Başlıyoruz

İşte bazı ortak HTML ve CSS. Örneğimizde, iki yüzen alt öğeye sahip bir üst öğemiz var.

/* The CSS you're starting with may look similar to this.
 * This doesn't solve our problem yet, but we'll get there shortly.
 */

.containing-div {
  background-color: #d2b48c;
  display: block;
  height: auto;
}

.floating-div {
  float: left;
  width: 50%;
}

.floating-div ul {
  display: inline-block;
  height: auto;
}
<!-- The HTML you're starting with might look similar to this -->
<div class="containing-div">
  <div class="floating-div">
    <ul>
      <li>List Item One</li>
      <li>List Item Two</li>
      <li>List Item Three</li>
      <li>List Item Four</li>
    </ul>
  </div>
  <div class="floating-div">
    <ul>
      <li>List Item Five</li>
      <li>List Item Six</li>
      <li>List Item Seven</li>
      <li>List Item Eight</li>
    </ul>
  </div>
</div>

Çözüm # 1: Taşma: Otomatik

Tüm modern tarayıcılarda ve Internet Explorer'da IE8'e geri dönen bir çözüm overflow: auto, üst öğeye eklemektir . Bu, kaydırma çubukları eklenmiş olarak IE7'de de çalışır.

/* Our Modified CSS.
 * This is one way we can solve our problem.
 */

.containing-div {
  background-color: #d2b48c;
  display: block;
  height: auto;
  overflow: auto;
  /*This is what we added!*/
}

.floating-div {
  float: left;
  width: 50%;
}

.floating-div ul {
  display: inline-block;
  height: auto;
}

Çözüm # 2: Kayan Üst Konteyner

Tüm modern tarayıcılarda çalışan ve IE7'ye geri dönen bir başka çözüm de ana konteyneri yüzdürmektir.

Ana div öğenizi kaydırmak sayfa mizanpajınızın diğer bölümlerini etkileyebileceğinden, bu her zaman pratik olmayabilir.

/* Modified CSS #2.
 * Floating parent div.
 */

.containing-div {
  background-color: #d2b48c;
  display: block;
  float: left;
  /*Added*/
  height: auto;
  width: 100%;
  /*Added*/
}

.floating-div {
  float: left;
  width: 50%;
}

.floating-div ul {
  display: inline-block;
  height: auto;
}

Yöntem # 3: Kayan Öğelerin Altına Temizleme Div Ekle

/* 
 * CSS to Solution #3.
 */

.containing-div {
  background-color: #d2b48c;
  display: block;
  height: auto;
}

.floating-div {
  float: left;
  width: 50%;
}

.floating-div ul {
  display: inline-block;
  height: auto;
}


/*Added*/

.clear {
  clear: both;
}
<!-- Solution 3, Add a clearing div to bottom of parent element -->
<div class="containing-div">
  <div class="floating-div">
    <ul>
      <li>List Item One</li>
      <li>List Item Two</li>
      <li>List Item Three</li>
      <li>List Item Four</li>
    </ul>
  </div>
  <div class="floating-div">
    <ul>
      <li>List Item Five</li>
      <li>List Item Six</li>
      <li>List Item Seven</li>
      <li>List Item Eight</li>
    </ul>
  </div>
  <div class="clear"></div>
</div>

Yöntem # 4: Üst Öğeye Temizleme Div Ekle Bu çözüm, eski tarayıcılar ve daha yeni tarayıcılar için oldukça kurşun geçirmezdir.

/* 
 * CSS to Solution #4.
 */

.containing-div {
  background-color: #d2b48c;
  display: block;
  height: auto;
}

.floating-div {
  float: left;
  width: 50%;
}

.floating-div ul {
  display: inline-block;
  height: auto;
}


/*Added*/

.clearfix {
  clear: both;
}

.clearfix:after {
  clear: both;
  content: "";
  display: table;
}
<!-- Solution 4, make parent element self-clearing -->
<div class="containing-div clearfix">
  <div class="floating-div">
    <ul>
      <li>List Item One</li>
      <li>List Item Two</li>
      <li>List Item Three</li>
      <li>List Item Four</li>
    </ul>
  </div>
  <div class="floating-div">
    <ul>
      <li>List Item Five</li>
      <li>List Item Six</li>
      <li>List Item Seven</li>
      <li>List Item Eight</li>
    </ul>
  </div>
</div>

dan https://www.lockedownseo.com/parent-div-100-height-child-floated-elements/


-1

Bu CSS ebeveyn için kullanın ve çalışır:

min-height:350px;
background:url(../images/inner/details_middle.gif) repeat-y 0 0 ;
padding:5px 10px;   
text-align:right;
overflow: hidden;
position: relative;
width: 100%;

2
Min yüksekliği kullanıyorsunuz, sayılmaz;)
pilau

-1

#parent{
  background-color:green;
  height:auto;
  width:300px;
  overflow:hidden;
}

#childRightCol{
  color:gray;
  background-color:yellow;
  margin:10px;
  padding:10px;
}
<div id="parent">
    <div id="childRightCol">
        <p>
          Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque vulputate sit amet neque ac consequat.
        </p>
    </div>
  </div>

overflow:hidden;css'deki özelliği kullanarak yönetiyorsunuz

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.