在TD中使用相对位置/绝对位置?


108

我有以下代码:

<td style="position: relative; min-height: 60px; vertical-align: top;">
    Contents of table cell, variable height, could be more than 60px;

    <div style="position: absolute; bottom: 0px;">
        Notice
    </div>
</td>

这根本不起作用。由于某种原因,TD上未读取position:relative命令,并且通知DIV被放置在页面底部的内容容器之外。我试图将TD的所有内容放入DIV中,例如:

<td>
    <div style="position: relative; min-height: 60px; vertical-align: top;">
        Contents of table cell, variable height, could be more than 60px;

        <div style="position: absolute; bottom: 0px;">
            Notice
        </div>
    </div>
</td>

但是,这产生了新的问题。由于表格单元格内容的高度是可变的,因此通知DIV并不总是位于单元格的底部。如果表格单元格延伸超过60px标记,但其他单元格都没有,则在其他单元格中,通知DIV向下60px,而不是底部。


有使用表的理由吗?我假设表的其余内容将转移此单元格的内容。如果需要该表,则可以在top的两行中使用valign = top,在bottom的底部使用valign = bottom
Wayne 2010年

如果您使用表格进行布局,则建议您不要这样做。使用表来显示数据很好,但是它们并不是最适合布局的。
凯尔(Kyle)2010年

5
它的日历...所以表格网格是必不可少的:8wayrun.com/events/monthly/1.2011
Jason Axelrod 2010年

Answers:


189

这是因为根据CSS 2.1position: relativeon对表元素的影响是不确定的。说明了本,position: relative有在Chrome 13的预期效果,但不能在Firefox 4,在这里你的解决方案是增加一个div在你的内容,并把position: relativediv代替td。以下内容说明了position: relative(1)代表div商品,(2)代表td(不好)以及最后(3)代表div内部td(再次代表)的结果。

在Firefox 4上

<table>
  <tr>
    <td>
      <div style="position:relative;">
        <span style="position:absolute; left:150px;">
          Absolute span
        </span>
        Relative div
      </div>
    </td>
  </tr>
</table>


29
div高度不会是100%,因此相对于底部的相对位置:0无效。
Softlion

1
请注意,此示例中的“绝对跨度”不会影响td高度,这基本上使使用表格无用。
Dror

@Softlion:如何包装的整个内容td一中div,设置为width: 100%height: 100%,从TD应用于任何填充到div,并将其设置为relative?这个想法是在上方创建一个薄的包含层td,它的行为类似于其td本身,但这是一个div。它为我工作。
CamilB

1
HTML源链接已死。您可以更新/刷新吗?
彼得·瓦尔加

1
对于那些在2019年或以后找到此答案的人:CSS2.1确实确实说过position:relative内部表部件的影响是不确定的,但这意味着表部件本身的行为(例如,尚不清楚td行为的边界应如何表现)如果position:relative在的情况下通过移位border-collapse:collapse。它没有将它们排除在可能包含绝对定位后代的中。因此,Firefox的行为原来只是一个bug,已在2014
修复。– Ilya Streltsyn

5

这个技巧也很合适,但是在这种情况下,对齐属性(中间,底部等)将不起作用。

<td style="display: block; position: relative;">
</td>


1

关于第二次尝试,您是否尝试过使用垂直对齐?要么

<td valign="bottom">

或使用CSS

vertical-align:bottom

那是行不通的……如果我那样做的话,表格单元格的内容将与底部隔开60px。而不是顶部。
杰森·阿克塞尔罗德

-2

如果执行“ display:block;”,也可以使用 在TD上,破坏了TD的身份,但是有效!

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.