如何使<div>填充<td>高度


99

我已经看过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

您如何建议我去解决这个问题?


Answers:


176

如果将TD的高度设置为1px,则子div的父级将加高以计算其百分比。因为您的内容将大于1px,所以td和div都会自动增长。Kinda是一个垃圾hack,但是我敢打赌它会起作用。


7
IE9似乎可以在Webkit中正常运行,但它完全崩溃了。
Daniel Imms 2012年

仅当我还将div设置为inline-block时,才能在IE11中为我工作。谢谢!
Danny C

5
这是在Firefox中也可以使用的解决方案:stackoverflow.com/questions/36575846/…–
Wouter

为了使它在Firefox和Chrome浏览器我的工作不得不用min-height: 1px;,而不是height: 1px;
马特Leonowicz

🤯我不确定我是否喜欢CSS还是讨厌它
菜鸟

35

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设置di​​v的高度

如果您保留 <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>需要指定的高度才能缩放到100%。从我读到的内容来看,这可能与jQuery有关,因为它可以为我计算出它。

2
我的工作并不是很好,我们决定采用其他方法。但我会接受您的回答,因为它是最好的答案。

3
哈哈,如果我让CSS改变我的方法的次数还多的话,:)
Pat Pat

5
我是唯一认为“ CSS高度:仅当元素的父级具有明确定义的高度时才100%起作用”的规则吗?无论如何,浏览器都会确定父元素的高度。有没有办法,你应该明确地设置父元素的高度。
Jez 2012年

1
jQuery解决方案虽然只在我将其放在文件末尾
时才起作用

5

您可以尝试使div浮动:

.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>


float:left建议似乎不起作用。通过删除它,可以改善此答案,因为提到的第二个解决方案似乎有效。
Wouter

1
Firefox不支持。看来只能在Chrome浏览器上使用。
YLombardi

8
至少在当今,该代码段也不适用于Chromium(我使用的是63.0.3239.84)。
迈克尔(Michael)

0

真的必须用JS做到这一点。这是一个解决方案。我没有使用您的类名,但是我在td类名“ full-height”内调用了div :-)很显然,使用了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()
    }
});

}

并且您想改为从docReady调用loadedFullHeights()。这实际上是我最终使用的,以防万一。想想就知道了!

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>本身的背景图像。

或将一些CSS应用于div:

.thatSetsABackgroundWithAnIcon{
    height:100%;
}

正如我在代码中所写。TD已经使用类设置了背景图像。因此,该选项不可行。我尝试将div的高度设置为100%,但这不起作用。它只包装到包含的<dl>的可变高度。因此,需要使div“理解”它应该填充的高度。和高度:100%不会那样做。(并非至少有一个)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.