使DIV填充整个表格单元格

Jas*_*son 151 css

我已经看过这个问题并且用Google搜索了一下,但到目前为止还没有任何效果.我现在认为它是2010年(那些问题/答案很老,而且很好,没有答案)我们有CSS3!有没有办法让一个div使用CSS填充整个表格单元格的宽度和高度?

我不知道单元格的宽度和/或高度是提前的,并且将div的宽度和高度设置为100%不起作用.

另外,我需要div的原因是因为我需要绝对将一些元素放在单元格之外,并且position: relative不适用于tds,所以我需要一个包装div.

dma*_*dma 61

表格单元格中的div height = 100%仅在表格具有高度属性本身时才有效.

<table border="1" style="height:300px; width: 100px;">
 <tr><td>cell1</td><td>cell2</td></tr>
 <tr>
   <td>
     <div style="height: 100%; width: 100%; background-color:pink;"></div>
   </td>
   <td>long text long text long text long text long text long text</td>
 </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

在FireFox中UPD你还应该height=100%为父TD元素设置值

  • 这太奇怪了.愚蠢的是2012年,这个错误还没有修复 (57认同)
  • 2020 年,为了钱而把人送上太空,“td”仍然需要 js 表现得像预期的那样:-) (6认同)
  • 正因为如此,我们支付了更多 (2认同)

Ian*_*nry 46

以下代码适用于IE 8,IE 8的IE 7兼容模式和Chrome(未在别处测试):

<table style="width:100px"> <!-- Not actually necessary; just makes the example text shorter -->
   <tr><td>test</td><td>test</td></tr>
   <tr>
      <td style="padding:0;">
         <div style="height:100%; width:100%; background-color:#abc; position:relative;">
            <img style="left:90px; position:absolute;" src="../Content/Images/attachment.png"/>
            test of really long content that causes the height of the cell to increase dynamically
         </div>
      </td>
      <td>test</td>
   </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

你在你原来的问题,设置表示width,并height100%没有工作,虽然,这使我怀疑,有一些规则覆盖它.您是否检查了Chrome或Firebug中的计算样式,以查看是否实际应用了宽度/高度规则?

编辑

我多么愚蠢!该div是大小的文字,不给td.您可以通过制作div display:inline-block,但在Chrome上无法解决此问题.这证明比较棘手......

  • 试试这个例子:http://jsfiddle.net/2K2tG/注意图像的图像是红色的,而不是#abc.宽度/高度100%什么都不做 (5认同)
  • 正如杰森指出的那样,高度:100%什么都不做......这并没有解决问题.感谢编辑,虽然提到了内联块. (4认同)
  • 是的,这适用于Chrome,但不适用于Firefox ... http://jsfiddle.net/38Ngn/1/ (3认同)

Whe*_*ill 44

我必须设置一个高度<tr>和高度:继承<td>s

tr有height: 1px(它无论如何被忽略)

然后设置td height: inherit

然后将div设置为 height: 100%

这在IE边缘和Chrome中适用于我:

<table style="width:200px;">
        <tr style="height: 1px;">
        <td style="height: inherit; border: 1px solid #000; width: 100px;">
              <div>
              Something big with multi lines and makes table bigger
              </div>
            </td>
            <td style="height: inherit; border: 1px solid #000; width: 100px;">
              <div style="background-color: red; height: 100%;">
              full-height div
              </div>
            </td>
        </tr>
    </table>
Run Code Online (Sandbox Code Playgroud)

  • 这在Firefox 45或46上不起作用 (9认同)
  • 这不适用于 Firefox,您必须在 th/td 单元格上设置 `height: 100%` 而不是 `inherit`。但它在 chrome/safari 等中不起作用:-)。我已经使用`@supports (height: -mo-available)`来实际定位firefox并在查询中设置高度。 (8认同)
  • 我只需要Chrome的`td {height:1px}`。 (3认同)

小智 26

由于这个地方的大多数解决方案都是不正确的,因此最上面的答案甚至没有解决问题,并且所选的答案不起作用。

要以尽可能短的方式解决问题,请将table高度设置为高度fit-content 即可完成。table-row100%

适用于 Firefox、Chrome 和 Edge。

例子:

<table style="height:fit-content">
    <tr style="height:100%">
        <td>
            <div style="height:100%"></div>
        </td>
    </tr>
</table>
Run Code Online (Sandbox Code Playgroud)


Mat*_*wne 15

如果你想要一个表格单元格中100%div的原因是能够将背景颜色延伸到整个高度但仍然能够在单元格之间有间距,那么你可以给<td>自己提供背景颜色并使用CSS border-spacing属性用于创建单元格之间的边距.

但是,如果你真的需要一个100%高度的div,那么就像其他人提到的那样,你需要为它分配一个固定的高度<table>或使用Javascript.


mrb*_*000 6

由于每个其他浏览器(包括IE 7,8和9)position:relative正确处理表格单元格,只有 Firefox出错,最好的办法是使用JavaScript填充程序.您不必为一个失败的浏览器更改DOM.当IE出错并且所有其他浏览器都正确时,人们总是使用填充程序.

这是一个包含所有代码注释的片段.JavaScript,HTML和CSS在我的示例中使用了响应式Web设计实践,但如果您不想要,则不必使用.(响应意味着它适应您的浏览器宽度.)

http://jsfiddle.net/mrbinky3000/MfWuV/33/

这是代码本身,但没有上下文就没有意义,所以请访问上面的jsfiddle URL.(完整代码片段在CSS和Javascript中也有很多注释.)

$(function() {
    // FireFox Shim
    if ($.browser.mozilla) {
        $('#test').wrapInner('<div class="ffpad"></div>');
        function ffpad() {
            var $ffpad = $('.ffpad'),
                $parent = $('.ffpad').parent(),
                w, h;
            $ffpad.height(0);
            if ($parent.css('display') == 'table-cell') {               
                h = $parent.outerHeight();
                $ffpad.height(h);
            }
        }
        $(window).on('resize', function() {
            ffpad();
        });
        ffpad();
    }
});
Run Code Online (Sandbox Code Playgroud)

  • Firefox并没有"弄错".CSS规范中未定义相对定位表格单元格.([链接](http://www.w3.org/TR/CSS21/visuren.html#choose-position)) (7认同)
  • 虽然这是一个很好的答案,但不要复制/粘贴此代码.自.jQuery 1.8以来,$ .browser已被弃用,并在1.9中删除.欲了解更多信息:http://api.jquery.com/jQuery.browser/ (2认同)

Edw*_*ome 5

如果<table> <tr> <td> <div>都已height: 100%;设置,则 div 将填充所有浏览器中的动态单元格高度。

  • 为什么这个有效? (2认同)

小智 5

因此,由于每个人都在发布他们的解决方案,但对我来说都不是一件好事,因此这是我的(在Chrome和Firefox上进行了测试)。

table { height: 1px; }
tr { height: 100%; }
td { height: 100%; }
td > div { height: 100%; }
Run Code Online (Sandbox Code Playgroud)

小提琴:https//jsfiddle.net/nh6g5fzv/

  • 先生或女士,您值得一颗金星。这让我抓狂。 (3认同)