Этот вопрос отвечает на обновление, так как браузеры изменили
Оригинальный вопрос
Я просмотрел несколько сообщений в 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
.
Как вы предлагаете мне это сделать?
Ответ 1
Если вы дадите вашему TD высоту 1px, тогда дочерний div будет иметь родителя с высотой, чтобы вычислить его% from. Поскольку ваше содержимое будет больше, чем 1px, td будет автоматически расти, как и div. Почувствуйте мусор, но я уверен, что это сработает.
Ответ 2
Высота CSS: 100% работает только в том случае, если родитель элемента имеет явно определенную высоту. Например, это будет работать, как ожидалось:
td {
height: 200px;
}
td div {
/* div will now take up full 200px of parent 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 height to its parent td height
$div.height($div.closest('td').height());
});
Ответ 3
Вы можете попробовать сделать свой div float:
.thatSetsABackgroundWithAnIcon{
float:left;
}
Альтернативно, используйте встроенный блок:
.thatSetsABackgroundWithAnIcon{
display: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>
Ответ 4
На этот вопрос уже ответил здесь. Просто поставьте height: 100%
как в div
, так и в контейнер td
.
Ответ 5
Действительно, нужно сделать это с помощью 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()
}
});
}
И вместо этого вы хотите вызвать loadFullHeights() из 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');
}
}
Ответ 6
Мой ответ может быть не тем, что вы хотите, но я думаю, что вам нужно
вы должны использовать эту структуру:
<table>
<tr>
<td class="table-class thatSetsABackground">
<table border="0" cellpadding="0" cellspacing="0" class="table-class">
<tr>
<td class="act-like-your-first-div">
//any thing you want
</td>
<td class="act-like-your-another-div">
//any thing you want
</td>
</tr>
<table>
</td>
</tr>
</table>
и стиль, похожий на
.table-class {
width: 100%;
height: 100%;
text-align: center;
}
чтобы вы могли использовать это решение в любой такой проблеме!!!
Ответ 7
Изменить фоновое изображение <td> сам.
Или примените некоторые css к div:
.thatSetsABackgroundWithAnIcon{
height:100%;
}