<div> dolgu <td> yüksekliği nasıl yapılır


103

StackOverflow'da birkaç gönderiye baktım, ancak bu oldukça basit soruya bir cevap bulamadım.

Bunun gibi bir HTML yapım var:

<table>
  <tr>
    <td class="thatSetsABackground">
      <div class="thatSetsABackgroundWithAnIcon">
        <dl>
          <dt>yada
          </dt>
          <dd>yada
          </dd>
        </dl>
      <div>
    </td>
    <td class="thatSetsABackground">
      <div class="thatSetsABackgroundWithAnIcon">
        <dl>
          <dt>yada
          </dt>
          <dd>yada
          </dd>
        </dl>
      <div>
    </td>
  </tr>
</table>

İhtiyacım olan şey, öğesinin divyüksekliğini doldurmaktır td, böylece div'in arka planını (simge) td.

Bunu nasıl yapmamı önerirsin?


Yanıtlar:


186

TD'nize 1px'lik bir yükseklik verirseniz, alt div'in% 'dan itibaren hesaplaması için yüksek bir ebeveyni olacaktır. İçeriğiniz 1 pikselden daha büyük olacağından, div gibi td otomatik olarak büyür. Bir çeşit çöp kesmek, ama eminim işe yarar.


7
Webkit'te iyi çalışıyor gibi görünse de, IE9 tamamen bozuluyor.
Daniel Imms

Benim için IE11'de sadece div'i satır içi blok olarak ayarladığımda çalışın. Teşekkürler!
Danny C

6
İşte Firefox'ta da çalışan bir çözüm: stackoverflow.com/questions/36575846/…
Wouter

Firefox'ta ve Chrome'da çalışmasını sağlamak için min-height: 1px;yerine kullanmak zorunda kaldımheight: 1px;
Matt Leonowicz

🤯 CSS'yi seviyor muyum yoksa nefret mi ediyorum emin değilim
çaylak

36

CSS yüksekliği:% 100 yalnızca öğenin üst öğesinin açıkça tanımlanmış bir yüksekliği varsa çalışır. Örneğin, bu beklendiği gibi çalışacaktır:

td {
    height: 200px;
}

td div {
    /* div will now take up full 200px of parent's height */
    height: 100%;
}

<td>Değişken yüksekliğiniz olacak gibi göründüğünden , sağ alt simgeyi kesinlikle konumlandırılmış bir resimle eklediyseniz ne olur?

.thatSetsABackgroundWithAnIcon {
    /* Makes the <div> a coordinate map for the icon */
    position: relative;

    /* Takes the full height of its parent <td>.  For this to work, the <td>
       must have an explicit height set. */
    height: 100%;
}

.thatSetsABackgroundWithAnIcon .theIcon {        
    position: absolute;
    bottom: 0;
    right: 0;
}

Tablo hücresi biçimlendirmesiyle şöyle:

<td class="thatSetsABackground">  
  <div class="thatSetsABackgroundWithAnIcon">    
    <dl>
      <dt>yada
      </dt>
      <dd>yada
      </dd>
    </dl>
    <img class="theIcon" src="foo-icon.png" alt="foo!"/>
  </div>
</td>

Düzenleme: div'in yüksekliğini ayarlamak için jQuery kullanma

Öğesinin alt öğesi <div>olarak tutarsanız <td>, bu jQuery pasajı yüksekliğini doğru şekilde ayarlayacaktır:

// Loop through all the div.thatSetsABackgroundWithAnIcon on your page
$('div.thatSetsABackgroundWithAnIcon').each(function(){
    var $div = $(this);

    // Set the div's height to its parent td's height
    $div.height($div.closest('td').height());
});

Bu işe yarayabilir. Denediğimde sana geri döneyim. Konuyu okudum ve% 100'e ölçeklenebilmesi için <div> 'in belirli bir yüksekliğe ihtiyacı olduğunu anladım. Okuduğum kadarıyla jQuery ile yapmak mümkündü, çünkü benim için hesaplayabilir.

2
Gerçekten o kadar iyi çalışmadım ve farklı bir yaklaşıma karar verdik. Ama cevabınızı en iyisi olduğu için kabul edeceğim.

3
Ben kere CSS sayısı için bir dolar vardı yalnızca Hah, :) benim yaklaşımını değiştirmek yaptı
Pat

5
"CSS yüksekliği:% 100 yalnızca öğenin ebeveyninin açıkça tanımlanmış bir yüksekliği varsa çalışır" ifadesinin gerçekten aptalca bir kural olduğunu düşünen tek kişi ben miyim? Tarayıcı yine de ana elemanın yüksekliğini belirler; imkan yok sen açıkça Ebeveyn elemanın yüksekliğini ayarlamak zorunda kalmamalı.
Jez

1
jquery çözümü ancak onu dosyanın sonuna yerleştirdiğimde işe yaradı, teşekkürler
luke_mclachlan

4

Div'inizi float yapmayı deneyebilirsiniz:

.thatSetsABackgroundWithAnIcon{

    float:left;
}

Alternatif olarak, satır içi blok kullanın:

.thatSetsABackgroundWithAnIcon{

    display:inline-block;
}

Satır içi blok yönteminin çalışma örneği:

table,
th,
td {
  border: 1px solid black;
}
<table>
  <tr>
    <td>
      <div style="border:1px solid red; height:100%; display:inline-block;">
        I want cell to be the full height
      </div>
    </td>
    <td>
      This cell
      <br/>is higher
      <br/>than the
      <br/>first one
    </td>
  </tr>
</table>


Float: sol öneri işe yaramıyor gibi görünüyor. Bahsedilen ikinci çözüm işe yarıyor gibi göründüğünden, bu yanıt kaldırılarak iyileştirilebilir.
Wouter

1
Firefox'ta yok. Görünüşe göre yalnızca Chrome ile çalışıyor.
YLombardi

8
Bu pasaj, en azından günümüzde Chromium'da da çalışmıyor (63.0.3239.84 kullanıyorum).
Michael

0

Bunu gerçekten JS ile yapmak zorundasın. İşte bir çözüm. Sınıf adlarınızı kullanmadım, ancak div'i "full-height" td sınıf adı içinde aradım :-) Açıkçası jQuery kullanıldı. Bunun jQuery (belge) .ready (function () {setFullHeights ();}); Ayrıca, resimleriniz varsa, aşağıdakiler gibi bir şeyle önce bunları yinelemeniz gerekeceğini unutmayın:

function loadedFullHeights(){
var imgCount = jQuery(".full-height").find("img").length;
if(imgCount===0){
    return setFullHeights();
}
var loaded = 0;
jQuery(".full-height").find("img").load(function(){
    loaded++;
    if(loaded ===imgCount){
        setFullHeights()
    }
});

}

Ve bunun yerine, docReady'den loadingFullHeights () çağırmak istersiniz. Bu aslında her ihtimale karşı kullandığım şey. Önceden düşünmelisin biliyorsun!

function setFullHeights(){
var par;
var height;
var $ = jQuery;
var heights=[];
var i = 0;
$(".full-height").each(function(){
    par =$(this).parent();
    height = $(par).height();
    var tPad = Number($(par).css('padding-top').replace('px',''));
    var bPad = Number($(par).css('padding-bottom').replace('px',''));
    height -= tPad+bPad;
    heights[i]=height;
    i++;
});
for(ii in heights){
    $(".full-height").eq(ii).css('height', heights[ii]+'px');
}

}



-4

<td> arkaplan görüntüsünü kendisinin değiştirin.

Veya div'e biraz css uygulayın:

.thatSetsABackgroundWithAnIcon{
    height:100%;
}

kodda yazdığım gibi. TD zaten bir sınıf kullanan bir arka plan görüntüsüne sahiptir. Yani bu seçenek uygun değil. Div yüksekliğini% 100 olarak ayarlamayı denedim, ancak bu işe yaramıyor. Basitçe içerilen <dl> değişken yüksekliğine sarılır. Dolayısıyla, div'in yüksekliği doldurması gerektiğini "anlamasını" sağlamak için bir şeye ihtiyaç vardır. Ve boy:% 100 bunu yapmaz. (en azından yalnız değil)
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.