Przejrzałem kilka postów w StackOverflow, ale nie byłem w stanie znaleźć odpowiedzi na to dość proste pytanie.
Mam taką konstrukcję HTML:
<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>
Potrzebuję tego, div
aby wypełnił wysokość elementu td
div, aby móc ustawić tło elementu div (ikonę) w prawym dolnym rogu td
.
Jak sugerujesz, żebym to zrobił?
Odpowiedzi:
Jeśli nadasz swojemu TD wysokość 1px, wtedy element podrzędny div będzie miał podwyższonego rodzica, aby obliczyć jego% z. Ponieważ zawartość byłaby większa niż 1px, td automatycznie wzrosłoby, podobnie jak div. Coś w rodzaju garbage hack, ale założę się, że to zadziała.
źródło
min-height: 1px;
zamiastheight: 1px;
Wysokość CSS: 100% działa tylko wtedy, gdy element nadrzędny elementu ma wyraźnie określoną wysokość. Na przykład zadziała to zgodnie z oczekiwaniami:
td { height: 200px; } td div { /* div will now take up full 200px of parent's height */ height: 100%; }
Ponieważ wydaje się, że twój
<td>
będzie miał zmienną wysokość, co by było, gdybyś dodał prawą dolną ikonę z absolutnie pozycjonowanym obrazem, takim jak:.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; }
Z takimi znacznikami komórek tabeli:
<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>
Edycja: użycie jQuery do ustawienia wysokości div
Jeśli zachowasz
<div>
jako dziecko<td>
, ten fragment kodu jQuery odpowiednio ustawi jego wysokość:// 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()); });
źródło
Możesz spróbować ustawić zmienną div:
.thatSetsABackgroundWithAnIcon{ float:left; }
Alternatywnie, użyj inline-block:
.thatSetsABackgroundWithAnIcon{ display:inline-block; }
Roboczy przykład metody inline-block:
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>
źródło
Naprawdę muszę to zrobić z JS. Oto rozwiązanie. Nie użyłem nazw twoich klas, ale nazwałem div w nazwie klasy td „pełnej wysokości” :-) Oczywiście użyłem jQuery. Zauważ, że zostało to wywołane z jQuery (dokument) .ready (function () {setFullHeights ();}); Zwróć też uwagę, że jeśli masz obrazy, będziesz musiał najpierw je iterować, używając czegoś takiego:
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() } });
}
Zamiast tego chciałbyś wywołać metodę loadFullHeights () z docReady. Właśnie tego użyłem na wszelki wypadek. Musisz myśleć z wyprzedzeniem, wiesz!
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'); }
}
źródło
Odpowiedzi na te pytania są już tutaj . Wystarczy włożyć
height: 100%
zarównodiv
do pojemnika, jak i do pojemnikatd
.źródło
Zmodyfikuj obraz tła samego <td>.
Lub zastosuj css do div:
.thatSetsABackgroundWithAnIcon{ height:100%; }
źródło