Я просмотрел несколько сообщений на StackOverflow, но не смог найти ответа на этот довольно простой вопрос.
У меня есть такая 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>
Что мне нужно, так это div
заполнить высоту элемента td
, чтобы я мог разместить фон div (значок) в правом нижнем углу файла td
.
Как вы предлагаете мне это сделать?
Ответы:
Если вы зададите своему TD высоту 1px, тогда у дочернего div будет родительский элемент с повышенным уровнем для вычисления его%. Поскольку ваше содержимое будет больше 1px, td будет автоматически увеличиваться, как и div. Какая-то фигня, но я уверен, что это сработает.
источник
min-height: 1px;
вместоheight: 1px;
Высота CSS: 100% работает, только если родительский элемент имеет явно определенную высоту. Например, это будет работать так, как ожидалось:
td { height: 200px; } td div { /* div will now take up full 200px of parent's height */ height: 100%; }
Поскольку кажется, что у вас
<td>
будет переменная высота, что, если бы вы добавили нижний правый значок с абсолютно позиционированным изображением следующим образом:.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; }
С разметкой ячеек таблицы так:
<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>
Изменить: использование jQuery для установки высоты div
Если вы сохраните
<div>
как дочерний элемент<td>
, этот фрагмент jQuery правильно установит его высоту:// 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()); });
источник
Вы можете попробовать сделать свой div плавающим:
.thatSetsABackgroundWithAnIcon{ float:left; }
В качестве альтернативы используйте встроенный блок:
.thatSetsABackgroundWithAnIcon{ display:inline-block; }
Рабочий пример метода 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>
источник
На самом деле нужно делать это с помощью JS. Вот решение. Я не использовал ваши имена классов, но я назвал div в имени класса td "full-height" :-) Очевидно, использовал jQuery. Обратите внимание, что это было вызвано из jQuery (document) .ready (function () {setFullHeights ();}); Также обратите внимание, что если у вас есть изображения, вам придется сначала пройти через них, например:
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() } });
}
И вместо этого вы захотите вызвать loadedFullHeights () из docReady. Собственно то, что я и использовал на всякий случай. Знаешь, надо думать наперед!
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'); }
}
источник
Ответы на этот вопрос уже даны здесь . Просто поместите
height: 100%
в обоихdiv
и контейнераtd
.источник
Измените фоновое изображение самого <td>.
Или примените CSS к div:
.thatSetsABackgroundWithAnIcon{ height:100%; }
источник